设计模式-职责链模式

2023-05-04 15:00:27 浏览数 (1)

职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。通过将多个处理对象组成一个链,当请求从链头开始传递时,每个处理对象都有机会处理该请求,直到其中一个处理对象处理完成,或者没有任何处理对象能够处理该请求为止。

职责链模式主要包含以下几个角色:

  1. Handler(抽象处理者):定义一个处理请求的接口,并且保持一个对下一个处理对象的引用。
  2. ConcreteHandler(具体处理者):实现抽象处理者的接口,并且根据自己的职责处理请求。如果不能处理该请求,则将请求转发给下一个处理对象。
  3. 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 应用中的过滤器、日志记录器等。职责链模式将请求的发送者和接收者解耦,降低了系统的耦合度,同时也增强了系统的灵活性和可扩展性。

0 人点赞