这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
首先明确含义
- 责任链模式:为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,属于行为型模式。
- 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
在工作中我们使用到的场景
- 比如我们尝实用的OA公司审批系统,比如在报销账单或者审批系统
- 我们往往是boos具有绝对审批权利,然后是财务第二审批,部门领导第一审批
- 那么我们直观的去思考业务逻辑就是
if (leader.author != null) {
if (financialer.author != null) {
if (boss.author != null){
handle(...)
}
}
}
-
来下面的例子深入理解责任链模式
-
例子:教师可以查看学生的家庭信息、班长只能查看学生的籍贯信息,而团支书只能查看学生的团籍关系
-
每层的执行权利都是可以往下链接的
-
创建抽象类
abstractAuther
,带有详细的各个职责的级别 -
创建教师类
- 创建班长类
- 创建团支书类
- 创建不同级别的的角色,赋予它们不同的职责级别
- 最后的输出
可以查看学生的家庭信息------家庭信息详细
可以查看学生的家庭信息------籍贯信息详细
可以查看学生的籍贯信息------籍贯信息详细
可以查看学生的家庭信息------团建信息详细
可以查看学生的籍贯信息------团建信息详细
可以查看学生的团籍关系------团建信息详细
- 每个角色的职责可以逐步往下传递,也可以跨级传递
特性
- 主要解决: 职责链上的处理者负责处理请求,用户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
- 优点:
- 降低耦合度。它将请求的发送者和接收者解耦。
- 简化了对象。使得对象不需要知道链的结构。
- 缺点:
- 不能保证请求一定被接收。
- 系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。