首页 > 其他分享 >责任链模式

责任链模式

时间:2024-09-17 15:13:03浏览次数:9  
标签:传递 请求 处理 Approver 模式 责任

责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。

责任链模式的主要角色:

  1. 抽象处理者(Handler): 定义处理请求的接口,通常包含一个处理请求的抽象方法和一个指向下一个处理者的引用(即责任链中的下一个处理者)。
  2. 具体处理者(ConcreteHandler): 继承自抽象处理者,实现具体的处理逻辑。如果它能处理这个请求,它就处理,否则将请求传递给下一个处理者。
  3. 客户端(Client): 创建处理链并将请求传递给责任链的第一个处理者。

责任链模式的核心思想:

请求沿着责任链传递,直到某个处理者处理它或请求到达链的末尾。如果链上的一个对象无法处理请求,它会将请求传递给链中的下一个对象。

优点:

  1. 降低耦合度: 请求的发送者不需要知道是哪一个处理者处理了请求。
  2. 增强灵活性: 可以根据需要动态地添加、修改或删除处理者。
  3. 责任分担: 各个处理者只负责处理自己能处理的部分,其他部分交给后续处理者。

缺点:

  1. 调试困难: 如果链过长,调试时难以追踪请求的处理过程。
  2. 性能开销: 请求从链的头部传递到尾部,可能需要遍历整个链,增加了性能开销。

责任链模式的应用场景:

  1. 权限过滤: 在系统中进行权限检查时,多个处理者可以根据不同的权限级别进行处理。
  2. 事件处理: 在GUI系统中,事件(如点击事件)可能需要在多个处理者之间传递,直到某个处理者处理它。
  3. 日志处理: 系统日志可以根据不同的日志级别传递到不同的处理者。

示例

代码

// 抽象处理者,定义了处理请求的方法和设置下一个处理者的方法
abstract class Approver {
    protected Approver nextApprover; // 下一个处理者

    public void setNextApprover(Approver nextApprover) {
        this.nextApprover = nextApprover;
    }

    public abstract void approveRequest(int amount);
}

// 具体处理者:组长,可以审批额度在1000元以下的请求
public class TeamLeader extends Approver {
    @Override
    public void approveRequest(int amount) {
        if (amount <= 1000) {
            System.out.println("组长批准了" + amount + "元的费用报销请求。");
        } else if (nextApprover != null) {
            System.out.println("组长无法批准" + amount + "元的请求,交由上级处理...");
            nextApprover.approveRequest(amount);
        }
    }
}
// 具体处理者:经理,可以审批额度在5000元以下的请求
public class Manager extends Approver {
    @Override
    public void approveRequest(int amount) {
        if (amount <= 5000) {
            System.out.println("经理批准了" + amount + "元的费用报销请求。");
        } else if (nextApprover != null) {
            System.out.println("经理无法批准" + amount + "元的请求,交由上级处理...");
            nextApprover.approveRequest(amount);
        }
    }
}
// 具体处理者:总监,可以审批额度在10000元以下的请求
public class Director extends Approver {
    @Override
    public void approveRequest(int amount) {
        if (amount <= 10000) {
            System.out.println("总监批准了" + amount + "元的费用报销请求。");
        } else if (nextApprover != null) {
            System.out.println("总监无法批准" + amount + "元的请求,交由上级处理...");
            nextApprover.approveRequest(amount);
        } else {
            System.out.println("请求" + amount + "元的报销费用过高,无法批准。");
        }
    }
}
//客户端
public class TestChainOfResponsibilityPattern {
    public static void main(String[] args) {
        // 创建责任链上的处理者
        Approver teamLeader = new TeamLeader();
        Approver manager = new Manager();
        Approver director = new Director();

        // 设置责任链
        teamLeader.setNextApprover(manager);  // 组长的下一个处理者是经理
        manager.setNextApprover(director);    // 经理的下一个处理者是总监

        // 模拟报销请求
        System.out.println("处理100元的请求:");
        teamLeader.approveRequest(100);

        System.out.println();

        System.out.println("处理3000元的请求:");
        teamLeader.approveRequest(3000);

        System.out.println();

        System.out.println("处理8000元的请求:");
        teamLeader.approveRequest(8000);

        System.out.println();

        System.out.println("处理15000元的请求:");
        teamLeader.approveRequest(15000);
    }
}

解释:

使用责任链模式在处理费用报销请求时的应用。通过设置不同级别的处理者(组长、经理和总监),不同额度的报销请求可以根据责任链传递到合适的审批人。如果当前处理者无法处理请求,则将请求传递给链中的下一个处理者。

标签:传递,请求,处理,Approver,模式,责任
From: https://www.cnblogs.com/20lxj666/p/18396293

相关文章

  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......
  • 单列模式
    单列模式“单例模式(SingletonPattern),用于确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这个模式在需要控制资源的访问或者确保某些操作只有一个实例时使用。单例模式的特点唯一性:保证一个类只有一个实例。全局访问:提供一个全局的访问点来获取这个实例。延迟......
  • 23种设计模式
    23种设计模式设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:1.创建型模式1.1单例模式(Singleton)目的:确保一个类只有一个实例,并提供一个全局访问点。适用场......
  • 适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,用于解决接口不兼容的问题。它的主要作用是将一个类的接口转换成客户端期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以一起工作。概念目标接口(Target):客户端期望使用的接口。源接口(Adaptee):需要被......
  • 原型模式
    原型模式原型模式(PrototypePattern)是一种创建型设计模式,其主要目的是通过复制现有的对象来创建新的对象,而不是通过构造函数进行实例化。这个模式的核心思想是“克隆”现有对象,以获得新的实例,尤其是在创建成本较高的情况下非常有用。原型模式通常涉及以下几个角色:原型(Prototyp......
  • 建造者模式
    建造者模式建造者模式(BuilderPattern)是一种创建型设计模式,它用于分步骤地创建复杂对象,而无需直接调用构造函数。通过将对象的构建过程与其表示(即对象内部细节的实现)分离,建造者模式允许创建不同的对象表示,同时保持构造过程的一致性。特点分步骤创建:建造者模式将对象的创建过程......
  • 抽象工厂模式
    抽象工厂模式抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式常用于需要创建一组相关或依赖对象的场景,确保这些对象在不同的环境中可以协同工作。特点抽象工厂:定义了一组创......
  • 享元模式
    享元模式(FlyweightPattern)是一种结构型设计模式,旨在通过共享大量细粒度对象来减少内存使用。它在需要创建大量相似对象的场景中尤其有用,通过共享对象来降低内存开销,从而提高性能。核心思想享元模式将对象的状态分为两部分:内部状态(IntrinsicState):不随外部环境改变,可以共享的......
  • 外观模式
    外观模式外观模式(FacadePattern)是一种结构型设计模式,旨在为复杂的子系统提供一个简单的接口。它的核心思想是将系统的复杂性封装在一个统一的接口中,使得外部代码可以通过这个接口简化对复杂系统的操作。主要组成部分外观类(FacadeClass):提供一个简化的接口来访问复杂的子系统......
  • 装饰者模式
    装饰者模式装饰者模式(DecoratorPattern)是一种结构型设计模式,主要用于动态地给对象添加额外的功能,而不改变其结构。这个模式通过创建一个装饰类来包装原始对象,从而扩展其功能。主要角色组件(Component):定义一个接口或抽象类,声明可以被装饰的对象所共有的接口。具体组件(Concrete......