Tomcat中的设计模式一

最近在看《深入剖析Tomcat》一书,同时,正在按照这本书内容开发一个自己的servlet容器。阅读过程中,发现的Tomcat的设计模式有:

1.单例模式。

Tomcat的容器分为Wrapper,Conetxt,Host,Engine四种。其中,Wrapper对应每一个Servlet的容器,Context则对应于应用程序的容器。因此,每一个Wrapper只能与一个Servlet相关联。因此,Wrapper使用了单例模式来保证Servlet实例的唯一性。

2.观察者模式

为了实现启动或关闭父容器即可启动或关闭组件以及子容器,Tomcat设计出一个生命周期接口Lifecycle。Context,Wrapper,Pipeline均实现了这个接口。而这个接口中提供了addLifecycleListener,removeLifecycleListener等方法来实现对这些容器或者组件在发生状态变化时通知监听者。

3.变相的迭代组合模式

同样是Lifecycle生命周期,Tomcat在启动容器时会启动子容器和组件。例如,Context的start方法中,除了完成自己的初始化之外,还会调用同样实现了Lifecycle接口的子容器数组Container[] children和Pipeline的启动方法。

4.组合

例如,SimpleContext实现了Context,Lifecycle,Pipeline三个接口,但是,其实,这些接口的功能并不直接在SimpleContext本身的方法中实现,而是通过使用成员变量pipeline,以及lifecycle来完成相关方法的实现。实际上,Tomcat在设计时并没有使用层层继承的方式来完成各个具体功能的Context类,而是把行为,例如Lifecycle,Pipeline选择使用接口实现,也就是把行为抽象成接口,使用成员变量进行组合的方式来完成设计。这也体现了设计模式的多用组合少用继承的设计思想。

5.工厂模式

HttpConnector连接器的ServerSocketFactory工厂本身的得到就是通过工厂模式来得到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值