工作中「责任链模式🤔」的感悟

2,689 阅读2分钟

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

首先明确含义

  • 责任链模式:为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,属于行为型模式。
  • 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

在工作中我们使用到的场景

  • 比如我们尝实用的OA公司审批系统,比如在报销账单或者审批系统
  • 我们往往是boos具有绝对审批权利,然后是财务第二审批,部门领导第一审批
  • 那么我们直观的去思考业务逻辑就是
if (leader.author != null) {
    if (financialer.author != null) {
        if (boss.author != null){
            handle(...)
        }
    }
}
  • 来下面的例子深入理解责任链模式

  • 例子:教师可以查看学生的家庭信息、班长只能查看学生的籍贯信息,而团支书只能查看学生的团籍关系

  • 每层的执行权利都是可以往下链接的

  • 创建抽象类 abstractAuther,带有详细的各个职责的级别 image.png

  • 创建教师类

image.png

  • 创建班长类

image.png

  • 创建团支书类

image.png

  • 创建不同级别的的角色,赋予它们不同的职责级别

image.png

  • 最后的输出
可以查看学生的家庭信息------家庭信息详细
可以查看学生的家庭信息------籍贯信息详细
可以查看学生的籍贯信息------籍贯信息详细
可以查看学生的家庭信息------团建信息详细
可以查看学生的籍贯信息------团建信息详细
可以查看学生的团籍关系------团建信息详细
  • 每个角色的职责可以逐步往下传递,也可以跨级传递

特性

  • 主要解决: 职责链上的处理者负责处理请求,用户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
  • 优点:  
  1. 降低耦合度。它将请求的发送者和接收者解耦。
  2. 简化了对象。使得对象不需要知道链的结构。
  • 缺点:  
  1. 不能保证请求一定被接收。
  2. 系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。