责任链(职责链)模式

 概念: 为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链; 当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止.

分类: 属于对象行为型模式

主要角色:

抽象处理者(Handler)角色:

       定义一个处理请求的方法,包含抽象处理方法和一个后继连接

具体处理者(Concrete Handler)角色:

       实现抽象处理者的处理方法,判断能否处理本次请求, 如果可以处理请求就进行处理,否则将请求转给它的后继者

客户类(Client)角色:

       创建处理链

使用一个简单的请假流程,涉及到多级审批,来演示使用责任链的流程

责任链模式UML类图

/**
 * 审批者抽象类
 */
@Data
public abstract class ApproveHandler {

    ApproveHandler next;

    // 指定下一个处理者
    public void setNext(ApproveHandler next) {
        this.next = next;
    }

    // 处理业务的方法
    public abstract void doHandler(int size);
}
/**
 * 审批者1 - 小组长
 */
public class GroupLeaderApproveHandler extends ApproveHandler{

    @Override
    public void doHandler(int size) {
        if (size <= 1) {
            System.out.println("组长审批通过!");
            return;
        }
        if (next != null) {
            next.doHandler(size);
        }
    }
}
/**
 * 审批者2 - 部门经理
 */
public class DepartLeaderApproveHandler extends ApproveHandler{
    @Override
    public void doHandler(int size) {
        if (size <= 3) {
            System.out.println("部门经理审批通过!");
            return;
        }
        if (next != null) {
            next.doHandler(size);
        }
    }
}
/**
 * 审批者3 - CTO
 */
public class CTOApproveHandler extends ApproveHandler {
    @Override
    public void doHandler(int size) {
        if (size <= 5) {
            System.out.println("CTO审批通过!");
            return;
        }
        if (next != null) {
            System.out.println("请假不予通过");
        }
    }
}
/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        int size = 5;
        ApproveHandler groupLeaderHandler = new GroupLeaderApproveHandler();
        ApproveHandler departLeaderHandler = new DepartLeaderApproveHandler();
        ApproveHandler ctoHandler = new CTOApproveHandler();

        groupLeaderHandler.setNext(departLeaderHandler);
        departLeaderHandler.setNext(ctoHandler);

        groupLeaderHandler.doHandler(size);
    }
}

 责任链模式在源码中的使用案例分析:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值