设计模式-职责链模式

职责链模式概述

职责链模式(Chain of Responsibility)是一种行为型设计模式,它通过为多个对象提供处理请求的机会,从而避免请求的发送者与接收者耦合。职责链模式将这些对象连成一条链,并沿着链传递请求,直到有对象处理它为止。

职责链模式的角色

  1. 抽象处理者(Handler):定义处理请求的接口,并包含设置下一个处理者的引用。
  2. 具体处理者(ConcreteHandler):实现抽象处理者,具体处理请求或将请求传递给下一个处理者。
  3. 客户端(Client):创建处理链并向处理链发送请求。

示例:权限审批

假设有一个系统中,需要按照审批权限的不同来处理审批请求:

  • 部门经理审批小额预算。
  • 总经理审批中等预算。
  • 董事会审批高额预算。

Java 实现代码

// 抽象处理者
abstract class Approver {
    protected Approver nextApprover; // 下一个处理者

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

    // 抽象方法:处理请求
    public abstract void handleRequest(int amount);
}

// 部门经理
class Manager extends Approver {
    @Override
    public void handleRequest(int amount) {
        if (amount <= 1000) {
            System.out.println("部门经理批准了" + amount + "元的预算请求。");
        } else if (nextApprover != null) {
            nextApprover.handleRequest(amount);
        }
    }
}

// 总经理
class GeneralManager extends Approver {
    @Override
    public void handleRequest(int amount) {
        if (amount <= 10000) {
            System.out.println("总经理批准了" + amount + "元的预算请求。");
        } else if (nextApprover != null) {
            nextApprover.handleRequest(amount);
        }
    }
}

// 董事会
class BoardOfDirectors extends Approver {
    @Override
    public void handleRequest(int amount) {
        if (amount > 10000) {
            System.out.println("董事会批准了" + amount + "元的预算请求。");
        } else if (nextApprover != null) {
            nextApprover.handleRequest(amount);
        }
    }
}

// 客户端
public class ChainOfResponsibilityDemo {
    public static void main(String[] args) {
        // 创建处理者
        Approver manager = new Manager();
        Approver generalManager = new GeneralManager();
        Approver board = new BoardOfDirectors();

        // 构建职责链
        manager.setNextApprover(generalManager);
        generalManager.setNextApprover(board);

        // 模拟请求
        System.out.println("请求1:500元");
        manager.handleRequest(500);

        System.out.println("\n请求2:5000元");
        manager.handleRequest(5000);

        System.out.println("\n请求3:20000元");
        manager.handleRequest(20000);
    }
}

输出结果

请求1:500元
部门经理批准了500元的预算请求。

请求2:5000元
总经理批准了5000元的预算请求。

请求3:20000元
董事会批准了20000元的预算请求。

职责链模式的优点

  1. 降低耦合度:请求发送者与接收者解耦。
  2. 动态组合:职责链可以动态地增加或修改处理者。

职责链模式的缺点

  1. 性能问题:链过长时,可能导致性能下降。
  2. 调试困难:链中节点的增删修改可能引发问题。

职责链模式在现实开发中常用于权限校验、事件处理等场景,帮助构建灵活、可扩展的系统。

posted @ 2025-01-16 09:05  庞某人  阅读(26)  评论(0)    收藏  举报