【设计模式与体系结构】行为型模式-责任链模式
1.【设计模式与体系结构】行为型模式-策略模式
2.【设计模式与体系结构】行为型模式-责任链模式
3.【设计模式与体系结构】行为型模式-备忘录模式4.【设计模式与体系结构】行为型模式-命令模式5.【设计模式与体系结构】行为型模式-状态模式简介
责任链模式(Chain Of Responsibility Pattern)允许沿着处理者链进行发送,避免请求者与发送者耦合在一起,每个处理者在收到请求后选择处理或者传递给下一个处理者,让多个对象都有接收到请求的可能性,这些对象形成链式结构,并且沿着这条链路传递请求,直至有对象处理请求。值得注意的是,责任链模式并不创建责任链,责任链的创建是由系统的其他部分完成的。
责任链模式的角色
- 抽象处理(Handler)者类:定义了一个处理请求的抽象方法,并持有一个指向下一个处理者的引用。
- 具体处理(Concrete Handler)者类:实现了抽象处理者的处理方法。在处理方法中,它可以根据具体条件决定是否处理请求,如果不处理则将请求传递给下一个处理者。
责任链模式的优点
- 请求者与处理者的解耦:请求者并不能直接确定请求最终是由谁进行处理,仅需要将请求发送到责任链上即可;
- 可扩展性好:链式结构,增删很容易,想要更改顺序也方便;
- 符合开闭原则:需要增加新的处理者类时,只需创建新的具体处理者类,并添加到责任链中即可,而无需修改原有代码。
责任链模式的缺点
- 请求可能不被处理:请求在责任链上可能没有处理者可以对其进行处理;
- 性能问题:责任链如果过长,那么请求在链上的传递会带来一定的性能消耗;
- 调试难度较高:由于请求可能在多个处理者之间传递,调试难度会稍大,可能需要跟踪处理整条责任链的逻辑。
责任链模式的使用场景
- 审批流程
- 拦截器或过滤器
- 事件处理系统
正文
定义一个抽象处理者类 Handler.java
public abstract class Handler { protected Handler handler; public void setNextHandler(Handler handler) { this.handler = handler; } public abstract void handleRequesr(int request); }
定义具体处理者类 ConcreteHandler1.java
public class ConcreteHandler1 extends Handler { @Override public void handleRequesr(int request) { if (request < 5) { System.out.println("ConcreteHandler1 处理了请求:" + request); } else { System.out.println("ConcreteHandler1 将请求传递给了 " + this.handler.getClass().getName()); this.handler.handleRequesr(request); } } }
定义具体处理者类 ConcreteHandler2.java
public class ConcreteHandler2 extends Handler { @Override public void handleRequesr(int request) { if (request < 10) { System.out.println("ConcreteHandler2 处理了请求:" + request); } else { System.out.println("ConcreteHandler2 将请求传递给了 " + this.handler.getClass().getName()); } } }
定义一个客户端
public class Client { public static void main(String[] args) { Handler concreteHandler1 = new ConcreteHandler1(); Handler concreteHandler2 = new ConcreteHandler2(); concreteHandler1.setNextHandler(concreteHandler2); concreteHandler1.handleRequesr(3); concreteHandler1.handleRequesr(8); } }
运行效果截图如下:
合集:
行为型模式
分类:
设计模式与体系结构 / 设计模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee