前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-职责链模式

设计模式-职责链模式

原创
作者头像
堕落飞鸟
发布2023-05-04 15:00:27
1820
发布2023-05-04 15:00:27
举报
文章被收录于专栏:飞鸟的专栏

职责链模式(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 应用中的过滤器、日志记录器等。职责链模式将请求的发送者和接收者解耦,降低了系统的耦合度,同时也增强了系统的灵活性和可扩展性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档