设计模式之责任链模式

定义

责任链模式将责任链内部的业务逻辑与细节隐藏起来,使得客户端可以将责任链视为一个整体并对其发起请求,实现了客户端与责任链内部的响应者的解耦。

工作中,我们的请假审批流程,就和我们的责任链模式逻辑是一样的。审批流程通常按负责人或工作职责进行拆分,并组织好各个环节的流程走向。

如上图所示,请假审批流程需要部门领导、公司领导的审批。

代码实现

部门经理类:员工发起请假流程,第一步是部门经理进行审批,部门经理审批通过后,需要移交公司经理审批

public class DeptManager {
    private String name;

    public DeptManager(String name) {
        this.name = name;
    }

    public boolean approve() {
        System.out.println("部门经理:" + name + "审批通过,移交公司经理");
        return true;
    }
}

公司经理类:待部门经理审批通过后,需要公司经理审批,公司经理审批通过,该审批流程结束

public class CompanyManager {
    private String name;

    public CompanyManager(String name) {
        this.name = name;
    }

    public boolean approve() {
        System.out.println("公司经理:"+name + "审批通过");
        return true;
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        DeptManager deptManager = new DeptManager("张三");
        boolean approve = deptManager.approve();
        if (approve) {
            CompanyManager manager = new CompanyManager("李四");
            manager.approve();
        }
        // 结果
        // 部门经理:张三审批通过,移交公司经理
        // 公司经理:李四审批通过
    }
}

根据上面的实现代码,客户端在发起请假审批的时候,需要先找到部门经理,如果部门经理审批通过了,需要再去找公司经理进行审批。如果我们后期为了优化和完善这个业务流程而添加新的审批角色,客户端就同样需要修改申请逻辑,增加了维护成本。

其实根据客户端发起的审批的流程,我们可以发现,流程之间其实是环环相扣,各个角色在审批之后,需要移交给上级审批,这种传递机制,我们可以将其优化成一个工作流,也就是我们的责任链模式。

优化

将审批角色抽象化,同时引用其上级审批角色。将审批方法抽象化,由其子类去实现

public abstract class Approver {
    protected String name;

    protected Approver nextApprover;

    public Approver(String name) {
        this.name = name;
    }

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

    public abstract void approve();
}

优化后的部门经理类

public class DmApprover extends Approver {
    public DmApprover(String name) {
        super(name);
    }

    @Override
    public void approve() {
        System.out.println("部门经理:" + name + "审批通过,移交公司经理");
        this.nextApprover.approve();
    }
}

优化后的公司经理类

public class CmApprover extends Approver {
    public CmApprover(String name) {
        super(name);
    }

    @Override
    public void approve() {
        System.out.println("公司经理:" + name + "审核通过");
    }
}

优化后,客户端在发起审批时,只需要将审批请求交给部门经理,后续的审批流程就会一步一步地进行,简化了客户端的流程

public class Client {
    public static void main(String[] args) {
        Approver approver = new DmApprover("王五");
        approver.setNextApprover(new CmApprover("赵六"));
        approver.approve();
        // 结果
        // 部门经理:王五审批通过,移交公司经理
        // 公司经理:赵六审核通过
    }
}

以上就是责任链模式的所有内容,我将持续更新设计模式,欢迎大家一起交流😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值