装饰者模式 -- WrappedByteBuf
描述:动态地给一个对象添加一些额外的职责。
出现原因:类的数量出现了爆炸式的增长。它可以帮我们的一些数据类型包装成Netty的ByteBuf,本身继承了ByteBuf, 它的构造函数是传入一个ByteBuf实例,这个传入的实例就是被装饰者,它的行为可以被当前这个类,也就是WrappedByteBuf(装饰者)动态改变。
https://blog.csdn.net/fst438060684/article/details/81156898
责任链模式 -- ChannelPipeline(ChannelHandler)
描述:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
ChannelPipeline源码注释也有解析清楚,ChannelPipeline负责按顺序组织各个ChannelHandler,ChannelHandlerContext作为handler上下文,handler的执行环境信息。
工厂模式 -- ReflectiveChannelFactory
描述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
ReflectiveChannelFactory可以帮助我们创建NIO Socket以及OIO Socket等等。
建造者模式 -- WebSocketServerProtocolConfig.Builder
描述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的分离。
//TODO: 暂时没有找到的场景,源码4.1.12中WebSocketServerProtocolConfig未找到
单例模式 -- ReadTimeoutException#INSTANCE
描述:确保一个类只有一个实例,自行实例化并向整个系统提供这个实例。
按照checkName我们看到了ReadTimeoutException,它使用了单例避免频繁地创建我们的TimeoutException。
模板模式 -- AbstractTrafficShapingHandler
描述:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。
流量整形当中有三种流量整形方式,他们都复用了代码,但是又有一些区别,所以它用到一个AbstractTrafficShapingHandler。
netty流量整形参考:https://blog.csdn.net/u010939285/article/details/104303181
观察者模式 -- ChannelFuture#addListener
描述:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,这所有依赖于它的对象都会得到通知并被自动更新。
ChannelFuture通过addListener可以让我们添加不同的listener进去,当Future成功或者失败的时候会触发回调通知这些Listener,让Listener执行相应的方法。
策略模式 -- EventExecutorChooser
描述:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
EventExecutorChooser可以帮我们从NIOEventGroup当中选择一个EventLoop,根据初始化线程池的大小判断线程选择器是哪个,如果是2的幂次方数,则选用PowerOfTwoEventExecutorChooser运算(使用与运算更加高效);其他情况下则使用GenericEventExecutorChooser进行运算。