设计模式之责任链模式

场景:去售楼处买方/击鼓传花游戏

设计模式之责任链模式_第1张图片
image.png
设计模式之责任链模式_第2张图片
image.png

什么是责任链模式
将接受者对象连成一条链,并在该链上传递请求,直到有一个接受者对象处理它。通过让更多的对象有机会处理请求,避免了请求发送者和接受者之间的耦合。

设计模式之责任链模式_第3张图片
image.png

后继:successor,遵循了oo中的依赖倒置原则

设计模式之责任链模式_第4张图片
image.png

用户的请求:customer请求折扣

设计模式之责任链模式_第5张图片
image.png

如何实现责任链模式

请求方,用户发起申请折扣的请求:

设计模式之责任链模式_第6张图片
image.png

请求传递的条件:价格处理人,处理折扣的请求

设计模式之责任链模式_第7张图片
image.png

责任链的每一个handler(每一个折扣处理者的处理handler):

设计模式之责任链模式_第8张图片
image.png
设计模式之责任链模式_第9张图片
image.png

责任链模式如何解耦

如何在销售和manager之上,添加一个权限层级lead小组长?
a.只需要添加一个handler,代表新的层级。
b.对工厂方法添加传递条件,从销售后继到lead,lead后继到manager(给lead设置了后继Successor)

设计模式之责任链模式_第10张图片
image.png

对PriceHandler 的解耦?将工厂方法从抽象方法中提出来

设计模式之责任链模式_第11张图片
image.png

将指定的方法移到某个文件中的快捷键操作方式:
选中方法名——Refactor——Move——选择需要移动到的目标文件——确定

责任链的实现:
1、OO的一些原则的单一职责原则 : 设置一个接口时,应该只将与这个接口业务相关的方法放在接口之中。一个方法只做一件事情
2、工场方法的实质在用返回值不在于参数,返回了一个抽象对象 PriceHandler,而非实质对象 (无论内部是sales,还是lead,它的实质是抽象对象)
3、用到责任链,总会用到工厂

责任链模式的应用

场景1:Java后端中的异常处理过程

设计模式之责任链模式_第12张图片
image.png

场景2:前端JavaScript 的事件模型

设计模式之责任链模式_第13张图片
image.png

场景3:JavaEE中的Filter :典型的Spring Security 权限框架

设计模式之责任链模式_第14张图片
image.png
设计模式之责任链模式_第15张图片
image.png

评价责任链模式

1.开闭原则(OCP):面向对象OO思想的重要原则( 对扩展开放, 对变更关闭)
在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即修改原有的代码对外部的使用是透明的。

2.执行效率(性能的损耗):
时间:在单个hander对象的时间很短,但是在遍历整条链时会花费较长的时间
内存:在创建整条链时,会创建很多类,真正使用只有一小部分, 导致内存增加

3.责任链模式 解耦, 低耦合

你可能感兴趣的:(设计模式之责任链模式)