设计模式——职责链模式

1.职责链模式的定义与特点

责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

我的理解:职责链模式其实这就是一个向上找责任人的问题,比如你是任课老师,有学生向你请假,你不能处理这个问题,就去找班主任;班主任能处理就处理,处理不了就去找教导主任,任课老师能处理就处理;处理不了就去找教导主任;教导能处理就处理;处理不了就去找校长。这就是一条责任链。
设计模式——职责链模式_第1张图片
每一个责任人都只有寻找上一级的方法,只与上一级打交道,不会越级请求。

2.职责链模式的结构

职责链模式主要包含以下角色:

抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

设计模式——职责链模式_第2张图片
设计模式——职责链模式_第3张图片
职责链模式的注意事项和细节

  1. 将请求和处理分开,实现解耦,提高系统的灵活性
  2. 简化了对象,使对象不需要知道链的结构
  3. 性能会受到影响,特别是在链比较长的时候,因此需控制链中最大节点数量,一般
    通过在Handler中设置一个最大节点数量,在setNext()方法中判断是否已经超过阀值,
    超过则不允许该链建立,避免出现超长链无意识地破坏系统性能
  4. 调试不方便。采用了类似递归的方式,调试时逻辑可能比较复杂
  5. 最佳应用场景:有多个对象可以处理同一个请求时,比如:多级请求、请假/加薪
    等审批流程、Java Web中Tomcat对Encoding的处理、拦截器




参考:
尚硅谷-图解Java设计模式(韩顺平)
责任链模式(职责链模式)详解
如有错误,欢迎指正

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