Java23种设计模式-行为型模式之责任链模式

news/2024/9/23 9:36:09/

责任链模式(Chain of Responsibility Pattern):允许将多个对象接成条链,并沿着这条链传递一个请求,直到链上的某个对象能够处理该请求为止。这种模式的目的是解耦请求的发送者和接收者,同时允许多个对象有机会处理请求,但一次只由一个对象来处理。

主要角色:
1.处理者(Handler):定义一个接口,其中包含一个方法用于处理请求(如 handleRequest()),并一个方法用于设置下一个处理者(如 setNext())。
2.具体处理者(ConcreteHandler):实现 Handler 接口,定义处理请求的方法以及如何传递请求给下一个处理者。
3.客户端(Client):创建处理者对象并构建责任链,然后向链的开始发送请求。

优点:
1.将请求的发送者和接收者解耦,使得发送者不必知道谁是接收者,以及请求是如何被处理的。
2.可以动态地添加或删除责任链中的处理者,或者改变处理者的顺序,而不影响其他处理者。
3.允许多个处理者存在,每个处理者可以根据需要对请求进行处理或传递。
缺点:
1.请求可能会经过多个处理者,这可能导致性能问题。
2.责任链太长或者处理逻辑过于复杂,可能会使得代码难以理解和维护。

适用场景:
1.当一个请求存在多个可能的处理者,且每个处理者都有可能处理该请求时。
2.当你想避免请求发送者和请求处理者之间的耦合时。

示例:定义了一个请求类(Request),然后定义了一个处理者接口(Handler),接着实现了具体的处理者类(ConcreteHandler),最后创建了一个客户端(Client)来测试责任链模式

//请求
public class Request {private String content;public String getContent() {return content;}public Request(String content) {this.content = content;}
}
//处理者
public interface Handler {void handleRequest(Request request);
}
//具体处理者
public class ConcreteHandler implements Handler{private Handler successor;public void setSuccessor(Handler successor) {this.successor = successor;}@Overridepublic void handleRequest(Request request) {if (request.getContent().contains("ConcreteHandler1")) {// 处理请求System.out.println("ConcreteHandler1 is handling the request.");} else if (successor != null) {successor.handleRequest(request);}}
}public class Client {public static void main(String[] args) {Handler concreteHandler1 = new ConcreteHandler();Handler concreteHandler2 = new ConcreteHandler();((ConcreteHandler) concreteHandler1).setSuccessor(concreteHandler2);Request request = new Request("ConcreteHandler1");concreteHandler1.handleRequest(request);}
}

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

相关文章

【c++】优先级队列与仿函数:C++编程的强大组合

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来讲解优先级队列priority_queue 目录 1.priority_queue的介绍和使用函数使用仿函数的使用与介绍greater和less 2.priority_queue的模拟实现基本框架…

详解数据结构:队列(含栈与队列扩展)

一、顺序队列 有一种线性序列,特点是先进先出,这种存储结构称为队列。队列也是一种线性表,只不过它是操作受限的线性表,只能再两端操作:一端进、一端出。进的一端称为队尾,出的一端称为队头。队列可以用顺…

Java23种设计模式-创建型模式之单例模式

单例模式(Singleton Pattern):通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例),该类负责创…

【算法刷题 | 贪心算法04】4.26(跳跃游戏、跳跃游戏||)

文章目录 6.跳跃游戏6.1题目6.2解法:贪心6.2.1贪心思路6.2.2代码实现 7.跳跃游戏||7.1题目7.2解法:贪心7.2.1贪心思路7.2.2代码实现 6.跳跃游戏 6.1题目 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你…

Hadoop之路---伪分布式环境搭建

hadoop更适合在liunx环境下运行,会节省后期很多麻烦,而用虚拟器就太占主机内存了,因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 (windows上如何安装wsl) 千万强调,创建完hado…

【蓝桥杯2024真题】好数

试题C: 好数 时间限制: 1.0s 内存限制: 256.0MB 本题总分:10分 【问题描述】 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位)上 的数字是奇数,偶数位(十位、千位、十万位)上的数…

中国股市:能赚钱的只有一种人

股市投资是一场马拉松,不是百米赛,你不能急于求成,更不能投机取巧!短线是银,长线是金。 真正的投资家,是能看准股市的长期趋向,掌握先机,长期等待的人。只图短利而没有长远眼光的人…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具,旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式,包括JPG、PNG、GIF、SVG、PSD、AI等,无论是矢量图还是位图,都能以清…