本文介绍: 责任链模式是一种行为型设计模式,用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求,从而减少请求的发送者和接收者之间的耦合。在责任链模式中,每个接收者包含对另一个接收者的引用,形成一条链。如果一个对象不能处理请求,它会将请求传递给链中的下一个对象,直至链的末端。责任链模式由多个处理器(或接收者)组成,每个处理器决定自己是否处理请求或将其传递给链上的下一个处理器。这种模式实现了发送者和接收者之间的解耦,同时允许动态地调整链中的处理器。处理器(Handler)
定义
责任链模式是一种行为型设计模式,用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求,从而减少请求的发送者和接收者之间的耦合。在责任链模式中,每个接收者包含对另一个接收者的引用,形成一条链。如果一个对象不能处理请求,它会将请求传递给链中的下一个对象,直至链的末端。
责任链模式由多个处理器(或接收者)组成,每个处理器决定自己是否处理请求或将其传递给链上的下一个处理器。这种模式实现了发送者和接收者之间的解耦,同时允许动态地调整链中的处理器。
解决的问题
使用场景
示例代码1-日志处理器
// 抽象处理器类
public abstract class Logger {
public static int INFO = 1;
public static int DEBUG = 2;
public static int ERROR = 3;
protected int level;
protected Logger nextLogger;
public void setNextLogger(Logger nextLogger) {
this.nextLogger = nextLogger;
}
public void logMessage(int level, String message) {
if (this.level <= level) {
write(message);
}
if (nextLogger != null) {
nextLogger.logMessage(level, message);
}
}
abstract protected void write(String message);
}
// 具体处理器实现
class ConsoleLogger extends Logger {
public ConsoleLogger(int level) {
this.level = level;
}
@Override
protected void write(String message) {
System.out.println("Standard Console::Logger: " + message);
}
}
// 客户端使用责任链
public class ChainPatternDemo {
private static Logger getChainOfLoggers() {
Logger errorLogger = new ErrorLogger(Logger.ERROR);
Logger fileLogger = new FileLogger(Logger.DEBUG);
Logger consoleLogger = new ConsoleLogger(Logger.INFO);
errorLogger.setNextLogger(fileLogger);
fileLogger.setNextLogger(consoleLogger);
return errorLogger;
}
public static void main(String[] args) {
Logger loggerChain = getChainOfLoggers();
loggerChain.logMessage(Logger.INFO, "This is an information.");
loggerChain.logMessage(Logger.DEBUG, "This is a debug level information.");
loggerChain.logMessage(Logger.ERROR, "This is an error information.");
}
}
示例代码2-审批流程
// 抽象处理器
abstract class Approver {
protected Approver successor;
public void setSuccessor(Approver successor) {
this.successor = successor;
}
public abstract void processRequest(PurchaseRequest request);
}
// 具体处理器:经理
class Manager extends Approver {
public void processRequest(PurchaseRequest request) {
if (request.getAmount() < 1000) {
System.out.println("Manager will approve the request of " + request.getAmount());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
// 具体处理器:总监
class Director extends Approver {
public void processRequest(PurchaseRequest request) {
if (request.getAmount() < 5000) {
System.out.println("Director will approve the request of " + request.getAmount());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
// 具体处理器:CEO
class CEO extends Approver {
public void processRequest(PurchaseRequest request) {
if (request.getAmount() < 10000) {
System.out.println("CEO will approve the request of " + request.getAmount());
} else {
System.out.println("Request of " + request.getAmount() + " needs a board meeting!");
}
}
}
// 请求类
class PurchaseRequest {
private double amount;
public PurchaseRequest(double amount) {
this.amount = amount;
}
public double getAmount() {
return amount;
}
}
// 客户端代码
public class ChainOfResponsibilityDemo {
public static void main(String[] args) {
Approver manager = new Manager();
Approver director = new Director();
Approver ceo = new CEO();
manager.setSuccessor(director);
director.setSuccessor(ceo);
manager.processRequest(new PurchaseRequest(500));
manager.processRequest(new PurchaseRequest(1500));
manager.processRequest(new PurchaseRequest(5500));
}
}
主要符合的设计原则
- 开闭原则(Open-Closed Principle):
- 单一职责原则(Single Responsibility Principle):
- 里氏替换原则(Liskov Substitution Principle):
在JDK中的应用
在Spring中的应用
原文地址:https://blog.csdn.net/haoxin963/article/details/134572564
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17629.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。