常用设计模式,以及设计模式应用的场景(二)

五.ChainOfResponsibility(责任链模式)
应用场景:Filter、Intercepter
我所做的公司项目集中it业务处理系统,统一任务发起使用责任链的模式。
tank大战中的碰撞检测(子弹碰tank,子弹碰墙壁,以及tank和墙壁),使用责任链模式。tank碰撞检测的责任链模式.gitee
常用设计模式,以及设计模式应用的场景(二)_第1张图片
Filter接口,具体的Filter实现类自己编写,在聚合到FilterChain中,调用的FilterChain的doFilter方法,于此同时我们可以根据doFilter方法的返回值进行responsibilty是否执行的控制,也可由filterChain自己控制。
Servlet中的Filter接口就是有FilterChain自身控制的,并且实现了,一个ChainOfResponsibility过滤request和response,并且对于Request的正向过滤,对于Response反向过滤。具体的实现是由filterChain自己控制的。
六.Decorator(装饰器模式)
项目中应用的Decorator模式很少
tank大战项目中,对于主站tank的fireStrategy中bullet进行装饰,添加子弹边框以及字段尾巴。代码地址:Decorator设计主站tank的bullet.gitee
Decorator装饰器模式:最终要的是,被装饰的对象和装饰器对象可以各自发展,以及装饰器对象也可以相互装饰(想要实现这个,要求装饰器抽象类继承被装饰对象,这样就可以装饰器对象相互进行装饰)。Decorator实际应用的比较少。框架中的IO流所使用的就是Decorator。
常用设计模式,以及设计模式应用的场景(二)_第2张图片
七.Observer(观察者模式,Listener)
Observer模式:对一事件的发生的响应,我们平时开发中碰到的钩子函数,就是这种模式。
netty中很多都是使用的Observer,netty中的方法很多都是异步的,所以我们一般需要针对我们调用异步的地方,“放置一个机器人”,等待结果返回,再由线程池中的线程针对其处理。
代码中的应用:tank大战中对于主站tank按下ctrl按键事件,完成开火功能(纯粹是为了联系Observer模式)。针对主站tank按下ctrl键,完成开火功能.gitee

常用设计模式,以及设计模式应用的场景(二)_第3张图片

你可能感兴趣的:(DesignPatterns)