职责链模式

职责链模式

什么是职责链模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

通过示例了解职责链模式

职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理者对象的链式结构传递,直到某个对象处理它。下面是一个简单的Java职责链模式示例,用于处理不同级别的员工请假申请:

抽象处理者:员工接口

public interface Employee {
    void setNext(Employee employee);
    void processLeaveRequest(Integer leaveDays);
}

具体处理者:普通员工

public class RegularEmployee implements Employee {
    private Employee next;

    @Override
    public void setNext(Employee employee) {
        this.next = employee;
    }

    @Override
    public void processLeaveRequest(Integer leaveDays) {
        if (leaveDays <= 3) {
            System.out.println("Regular employee approved 3 days or less leave.");
        } else if (next != null) {
            System.out.println("Regular employee forwarded the request to higher authority.");
            next.processLeaveRequest(leaveDays);
        } else {
            System.out.println("Leave request exceeds regular employee's limit.");
        }
    }
}

具体处理者:主管

public class Manager implements Employee {
    private Employee next;

    @Override
    public void setNext(Employee employee) {
        this.next = employee;
    }

    @Override
    public void processLeaveRequest(Integer leaveDays) {
        if (leaveDays <= 7) {
            System.out.println("Manager approved 7 days or less leave.");
        } else if (next != null) {
            System.out.println("Manager forwarded the request to higher authority.");
            next.processLeaveRequest(leaveDays);
        } else {
            System.out.println("Leave request exceeds manager's limit.");
        }
    }
}

具体处理者:部门经理

public class DepartmentHead implements Employee {
    @Override
    public void setNext(Employee employee) {
        // 不需要设置下一个处理者,因为部门经理是最高级别的审批人
    }

    @Override
    public void processLeaveRequest(Integer leaveDays) {
        if (leaveDays <= 14) {
            System.out.println("Department head approved 14 days or less leave.");
        } else {
            System.out.println("Leave request exceeds department head's limit.");
        }
    }
}

主程序

public class ChainOfResponsibilityDemo {
    public static void main(String[] args) {
        Employee regular = new RegularEmployee();
        Employee manager = new Manager();
        Employee departmentHead = new DepartmentHead();

        regular.setNext(manager);
        manager.setNext(departmentHead);

        regular.processLeaveRequest(5); // 输出:Regular employee approved 3 days or less leave.
        regular.processLeaveRequest(8); // 输出:Regular employee forwarded the request to higher authority. Manager approved 7 days or less leave.
        regular.processLeaveRequest(16); // 输出:Regular employee forwarded the request to higher authority. Manager forwarded the request to higher authority. Leave request exceeds department head's limit.
    }
}
  1. Employee接口是抽象处理者,定义了设置下一个处理者和处理请假申请的方法。
  2. RegularEmployee, Manager, 和 DepartmentHead是具体处理者,实现了Employee接口,并根据各自的权限范围处理请假申请。
  3. 职责链的建立是通过setNext方法将处理者对象链接在一起。
  4. main方法展示了如何创建职责链,并通过processLeaveRequest方法处理不同数量的请假天数请求。

职责链模式允许在不增加额外的复杂性的情况下添加新的处理者,同时保持了请求的发送者和接收者的解耦。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值