Tomcat原理系列之五:Tomcat哪些设计给我印象深刻

Tomcat原理系列之五:Tomcat有哪些优秀设计

读Tomcat也有一段时间了.读源码目的不仅仅是在了解其运行的原理,还有就是借鉴其优秀设计,并应用到日常的编码中去

静态内部类:

Tomcat中大量使用了内部类.我对其中印象比较深的就是Endponit.

以NioEndpoint为例.

作为处理NIO类型的连接的入口(端点),他把Acceptor,Poller,SocketProcessor放在NioEndpoint中.有啥好处呢

设想一下,如果把这些提出来创建类,Nio类型的创建一批,Aio类型的创建一批. 这样不是也可以吗?

答案是:当然可以.

但我是认为, 将其组合在一起, 更能体现其高内聚性,不同类型的相关类组合在一起.使NioEndpoint具有一个丰富的功能,体现了更好的封装. 并且静态内部类依赖于外部类,不依赖于外部类对象,也就是我们不需要实例化外部类就可以使用静态内部类.所以并不会影响其他类使用静态内部类,又体现了低耦合性.

所以,在某些需要多个功能类组合在一起才能完成某个操作时,我们可以尝试使用静态内部类的方法,更能体现操作的完整性.
在这里插入图片描述

生产者消费者

还是以NioEndpoint为例: 其内部类Acceptor 与Poller ,PollerEvent 完美的组成一个典型的生产者消费者模式

Acceptor 循环接收请求,然后将请求封装到PollerEvent, 注册到Poller.queue队列上去.Poller不断从queue队列里取PollerEvent做进一步处理
在这里插入图片描述
将请求与处理解耦.

设计模式

凡是优秀的框架,都少不了用那么一两个设计模式.

  • 模板模式:
    Lifecycle接口,定义了组件生命周期的各个阶段.
    LifecycleBase:它实现了Lifecycle的init、start、stop等主要逻辑.init(),start(),stop()作为通用方法,定义算法骨架,调用模板方法,将具体的功能实现延迟到子类去实现.
    [LifecycleBase中的模板方法]在这里插入图片描述
  • 观察者模式:
    LifecycleListener 代表的是抽象观察者,
    lifecycleEvent代表了一个事件
    当组件的状态发生变化时,会调用fireLifecycleEvent将事件广播到LifecycleListener监听器中, 对应的监听器就对事件做出相应
  • 责任了模式
    Tomcat中的层级调用,是理解Tomcat启动,初始化的关键.每层都持有下家的引用.请求在请求链上传递, 每层组件处理完成后,就将请求交个下家继续处理.直至每层都处理完毕.
    Tomcat有哪些是责任链模式呢?
    Cotainer容器Engine->Host->Context->Wrapper
    Pipeline 和 Valve 组成的处理链
    ApplicationFilterChain 过滤器链
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值