美文网首页
设计模式之责任链模式

设计模式之责任链模式

作者: 小螺丝钉cici | 来源:发表于2019-05-10 11:36 被阅读0次

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

    image.png image.png

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

    image.png

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

    image.png

    用户的请求:customer请求折扣

    image.png

    如何实现责任链模式

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

    image.png

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

    image.png

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

    image.png image.png

    责任链模式如何解耦

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

    image.png

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

    image.png

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

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

    责任链模式的应用

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

    image.png

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

    image.png

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

    image.png image.png

    评价责任链模式

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

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

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

    相关文章

      网友评论

          本文标题:设计模式之责任链模式

          本文链接:https://www.haomeiwen.com/subject/eujooqtx.html