责任链模式

2021-09-29  本文已影响0人  攻城虱小马褂

一个故事

小张需要申请一台显示器,需要在公司内部系统提交审核清单。审核清单的审批流程要经过直属领导、部门领导、资源部领导几个环节审批,其中任何一个环节审核不通过,显示器就申请不下来。

责任链模式来模拟审批流程

审批流程就像一个链条一样,一级一级审批,直到最后资源部领导核查通过,小张就能拿到想要的显示器了

代码案例

public abstract class VerifyHandler {
    private VerifyHandler nextVerify;

    public void setNextVerify(VerifyHandler nextVerify){
        this.nextVerify = nextVerify;
    }

    public abstract void examine(Request request);

    public void nextVerify(Request request){
        if(nextVerify != null){
            this.nextVerify.examine(request);
        }
    }
}
public class TeamLeaderVerifyHandler extends VerifyHandler{

    @Override
    public void examine(Request request) {
        System.out.println(request.getRequest());

        System.out.println("直属领导审批通过");

        nextVerify(request);
    }
}
public class ApartmentVerifyHandler extends VerifyHandler{
    @Override
    public void examine(Request request) {
        System.out.println("部门领导审批通过");

        nextVerify(request);
    }
}
public class ResourceVerifyHandler extends VerifyHandler{
    @Override
    public void examine(Request request) {
        System.out.println("资源部领导审批通过");
        System.out.println("发放显示器");
    }
}
public class Request {
    private String request;

    public String getRequest() {
        return request;
    }

    public void setRequest(String request) {
        this.request = request;
    }

    public Request(String request){
        this.request = request;
    }
}
public class Client {
    public static void main(String[] args) {
        TeamLeaderVerifyHandler teamLeaderVerifyHandler = new TeamLeaderVerifyHandler();
        ApartmentVerifyHandler apartmentVerifyHandler = new ApartmentVerifyHandler();
        ResourceVerifyHandler resourceVerifyHandler = new ResourceVerifyHandler();

        teamLeaderVerifyHandler.setNextVerify(apartmentVerifyHandler);
        apartmentVerifyHandler.setNextVerify(resourceVerifyHandler);

        Request request = new Request("申请一条显示器");
        teamLeaderVerifyHandler.examine(request);
    }
}

如何理解责任链模式

使多个对象都有机会处理请求,从未避免了发送者与接收者之间的耦合关系,将这些对象连成一个链条,沿着链条传递请求。其结构和链表是类似的。

当有审批流程进入时,先经过直属领导审批,待直属领导审批通过后,再把审批请求传递给部门领导,部门领导审批过后再传递给资源部领导,由此类推,形成一个链条,链条上的每个对象的职责各不相同。

责任链模式模型抽象

类图(TODO)

责任链模式的应用

责任链模式的优点

责任链模式的缺点

上一篇 下一篇

猜你喜欢

热点阅读