Java责任链设计模式

news/2024/12/1 0:28:26/

Java责任链设计模式

定义

责任链设计模式,是一种行为型设计模式,用于将请求从一个处理者传递到另一个处理者,直到请求被处理为止。责任链模式一般用于解耦命令发送者和接受者,处理时选择处理策略。责任链模式适用于多个对象共同对一个任务进行处理,这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。客户端负责组装链式结构,但是客户端不需要关心最终是谁来处理了任务。

对应角色

  • 抽象处理者(Handler):定义了一个处理请求的接口,包含抽象处理方法和一个指向下一个处理者的引用。
  • 具体处理者(ConcreteHandler):实现抽象处理者的接口,对请求进行处理,如果不能处理则将请求转发给下一个处理者。
  • 客户端(Client):创建责任链,并将请求发送到链上。

优缺点

优点

  • 请求与处理解耦。
  • 处理者只需要关心自己的处理逻辑即可,如果不是自己的直接转发。
  • 具有链式传递功能,请求者不需要关心链路结构等待结果就好。
  • 易于维护,可以很灵活地修改链路的结构新增或者删除,符合开闭原则。

缺点

  • 类的数量可能会很多,需要提前确定好责任链的完整结构,不太灵活。

应用场景

  • 多个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定。
  • 在请求处理者不明确的情况下向对个对象中的一个提交一个请求。
  • 需要动态处理一组对象处理请求。

实例

public abstract class Handler {protected Handler successor;public void setSuccessor(Handler successor) {this.successor = successor;}public abstract void handleRequest(int request);
}public class ConcreteHandler1 extends Handler {public void handleRequest(int request) {if (request >= 0 && request < 10) {System.out.println(this.getClass().getName() + " handled request " + request);} else if (successor != null) {successor.handleRequest(request);}}
}public class ConcreteHandler2 extends Handler {public void handleRequest(int request) {if (request >= 10 && request < 20) {System.out.println(this.getClass().getName() + " handled request " + request);} else if (successor != null) {successor.handleRequest(request);}}
}public class ConcreteHandler3 extends Handler {public void handleRequest(int request) {if (request >= 20 && request < 30) {System.out.println(this.getClass().getName() + " handled request " + request);} else if (successor != null) {successor.handleRequest(request);}}
}public class ChainOfResponsibilityPatternDemo {public static void main(String[] args) {Handler h1 = new ConcreteHandler1();Handler h2 = new ConcreteHandler2();Handler h3 = new ConcreteHandler3();h1.setSuccessor(h2);h2.setSuccessor(h3);int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};for (int request : requests) {h1.handleRequest(request);}}
}这个例子中,我们创建了三个处理者类,每个类都有一个处理请求的方法。如果请求在该类的处理范围内,则处理请求;否则,将请求转发给下一个处理者。在客户端代码中,我们创建了一个处理者链,并将请求发送到第一个处理者。

http://www.ppmy.cn/news/905938.html

相关文章

TPP: Transparent Page Placement for CXL-Enabled Tiered-Memory数据中心使用异构内存

文章来自International Conference on Architectural Support for Programming Languages and Operating Systems,ASPLOS,2023 0.所有作者及单位 Hasan Al Maruf,Mosharaf Chowdhury,密歇根大学Hao Wang,Niket Agarwal,Pallab Bhattacharya,英伟达Abhishek Dhanotia,Jo…

定积分求曲线的弧长习题

前置知识&#xff1a;定积分求曲线的弧长 习题1 已知 f ( x ) 2 3 x 3 2 f(x)\dfrac 23x^{\frac 32} f(x)32​x23​&#xff0c;求 y f ( x ) yf(x) yf(x)在 [ 0 , 1 ] [0,1] [0,1]上的弧长。 解&#xff1a; L ∫ 0 1 1 f ′ ( x ) 2 d x ∫ 0 1 1 x d x \qquad L\i…

生活有哪些残忍的真相?

1.很多人拼尽全力&#xff0c;只是为了艰难的生存。 2.大多数人一点也不喜欢读书&#xff0c;只是喜欢被别人贴上“爱读书”的标签罢了。 3.你越没能力&#xff0c;社交圈质量就越低&#xff0c;碰到的傻逼就越多。 4.职场绝不能追求快乐&#xff0c;只能追求痛苦的成长。 5.抬…

SpringBoot入门学习

SpringBoot入门学习 Spring再简化&#xff1a;SpringBoot-jar&#xff1a;内嵌tomcat&#xff1b;微服务架构&#xff01; 服务越来越多就出来了Springcloud 回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&am…

深度数据对比分析:阿里云服务器和腾讯云服务器那家好?

服务器具有维护成本低&#xff0c;安全稳定&#xff0c;高可扩展性和 7 X 24 小时的售后支持的优势&#xff0c;因此云服务器成为中小企业建站的首要选择。国内的云服务器竞争也进入了跑马圈地的时代&#xff0c;以阿里云、腾讯云、百度云三大BAT为首&#xff0c;不断推出优惠活…

马斯克与贝索斯:世界上最有钱的两人展开太空大战

作者 | 李鹏飞 来源 | 字母榜&#xff08;ID&#xff1a;wujicaijing&#xff09; 埃隆马斯克的火星移民梦又前进了一小步。日前他在推特上透露&#xff0c;Starship SN8原型机最早可能会在美国时间12月2日开始飞行。此前&#xff0c;11月25日&#xff0c;SpaceX升空了第16批星…

最高境界的工作

每个人都渴望得到成功的秘诀。本书讲述了19位澳大利亚成功小企业家的创业历程。这些故事证实了在企业经营中智慧的力量,同时也阐明了人际关系在其中的重要性。归根结底,企业经营行为是人的行为,不管是雇员、老板、银行经理、顾问还是合伙人,他们在企业经营中都同样重要。

未来财富:呼啸而来的数字人民币

各位兄弟姐妹&#xff0c;山兜攀讲&#xff0c;讲讲科技前沿&#xff0c;我是榕辉。 今天开篇第一讲&#xff0c;我们来讲讲钱。 钱是个好东西&#xff0c;大家都喜欢&#xff0c;多多益善&#xff0c;今天要讲的钱是最近刚刚开始试点使用的数字人民币&#xff0c;这玩意虽然…