本文只是一个回忆用的总结,建议阅读原文,以获得更全面的理解。
模板方法、观察者模式、责任链设计模式
StandardServer
直接继承了抽象父类LifecycleMBeanBase
,从而间接继承了LifecycleBase
,我们在LifecycleBase
中找到了start()
方法。这就引出了“模板方法”这个非常好用的设计模式,start()
方法就是通用行为,或者称之为算法的骨架,方法内部的步骤中肯定存在一些留给各个子类的具体实现。
参考tomcat生命周期的中后部分。
StandardServer
的每个生命周期函数xxInternal
中,会调用fireLifecycleEvent
,其内部又会对每个Listener
调用lifecycleEvent
。Listener
在server.xml
中定义了:
这里用到了观察者模式。
我们发现,StandardService
类的初始化过程依然是将初始化的过程“下放”给子容器初始化的过程。
其实每个组件的生命周期调用都会调用其子组件的对应生命周期函数。
所以这用到了责任链设计模式。