职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。通过将多个处理对象组成一个链,当请求从链头开始传递时,每个处理对象都有机会处理该请求,直到其中一个处理对象处理完成,或者没有任何处理对象能够处理该请求为止。
职责链模式主要包含以下几个角色:
- Handler(抽象处理者):定义一个处理请求的接口,并且保持一个对下一个处理对象的引用。
- ConcreteHandler(具体处理者):实现抽象处理者的接口,并且根据自己的职责处理请求。如果不能处理该请求,则将请求转发给下一个处理对象。
- Client(客户端):创建处理对象链,并且将请求发送到链的头部。
下面是一个简单的职责链模式的 Java 示例,该示例模拟一个商品售卖的场景,其中不同的销售员有不同的折扣策略,根据销售员的等级来确定采用哪种折扣策略。
代码语言:javascript复制public class Client {
public static void main(String[] args) {
// 创建销售员对象
Salesman junior = new JuniorSalesman();
Salesman middle = new MiddleSalesman();
Salesman senior = new SeniorSalesman();
// 构建职责链
junior.setNextSalesman(middle);
middle.setNextSalesman(senior);
// 创建商品对象
Product product = new Product("手机", 120.0);
// 发送请求
double price = junior.calcPrice(product);
System.out.println("最终价格:" price);
}
}
在上面的示例代码中,客户端首先创建了三个销售员对象,然后通过 setNextSalesman
方法将它们组成了一个职责链。客户端还创建了一个商品对象,并将该对象发送给职责链的头部,即初级销售员,最终得到了商品的折扣价格。
这个示例比较简单,但是职责链模式可以应用于很多场景,比如 Web 应用中的过滤器、日志记录器等。职责链模式将请求的发送者和接收者解耦,降低了系统的耦合度,同时也增强了系统的灵活性和可扩展性。