职责链模式(Chain of Responsibility)
定义:避免请求的发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,沿着这条链传递请求,直到有对象处理它为止。
角色:
- 抽象处理者:Handler
- 具体处理者:ConcreteHandler
- 客户类:Client
模式分析:
关键在于抽象处理者类的设计:很多对象由每一个对象对其下家的引用而连接在一起。
抽象处理者典型代码:
//审批者类:抽象处理者 abstract class Approver { protected Approver successor; //定义后继对象 protected String name; //审批者姓名 public Approver(String name) { this.name = name; } //设置后继者 public void setSuccessor(Approver successor) { this.successor = successor; } //抽象请求处理方法 public abstract void processRequest(PurchaseRequest request); }
具体处理者典型代码:
//董事长类:具体处理者 class ViceManager extends Approver { public ViceManager(String name) { super(name); } //具体请求处理方法 public void processRequest(PurchaseRequest request) { if (request.getAmount() < 100000) { System.out.println("副总经理" + this.name + "审批采购单:" + request.getNumber() + ",金额:" + request.getAmount() + "元,采购目的:" + request.getPurpose() + "。"); //处理请求 } else { this.successor.processRequest(request); //转发请求 } } }
客户端调用典型代码:轮流设置下家
position1.setSuccessor(position2); position2.setSuccessor(position3); position3.setSuccessor(position4); position4.setSuccessor(meeting);
package com.c015; public class Client { public static void main(String[] args) { Approver position1,position2,position3,position4,meeting; // 多个处理者 position1 = new Director("甲"); position2 = new PartManager("乙"); position3 = new ViceManager("丙"); position4 = new Manager("丁"); meeting = new Congress("职工大会"); //创建职责链 position1.setSuccessor(position2); position2.setSuccessor(position3); position3.setSuccessor(position4); position4.setSuccessor(meeting); //创建采购单 PurchaseRequest pr1 = new PurchaseRequest(5000,10001,"XXX"); position1.processRequest(pr1); PurchaseRequest pr2 = new PurchaseRequest(45000,10002,"XXX"); position1.processRequest(pr2); PurchaseRequest pr3 = new PurchaseRequest(77000,10003,"XXX"); position1.processRequest(pr3); PurchaseRequest pr4 = new PurchaseRequest(150000,10004,"XXX"); position1.processRequest(pr4); PurchaseRequest pr5 = new PurchaseRequest(800000,10005,"XXX"); position1.processRequest(pr5); } }
核心理解
职责链模式关键在于设置职责的下家!
抽象处理者类要有一个自身的对象作为成员属性变量,并通过一个set方法完成赋值,之后要提供一个具体处理的方法接口供子类重写!
后续的子类重写具体的处理办法,如果处理不了,再次调用父类的处理方法直接把请求交给下家来完成!
好看请赞,养成习惯:) 本文来自博客园,作者:靠谱杨, 转载请注明原文链接:https://www.cnblogs.com/rainbow-1/p/15626936.html
欢迎来我的51CTO博客主页踩一踩 我的51CTO博客
文章中的公众号名称可能有误,请统一搜索:靠谱杨的秘密基地
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-11-30 【已解决】JDBC --- update代码运行成功但是数据库数据没有更新