设计模式 1

99 阅读2分钟

JAVA设计模式-责任链模式

前言

回顾设计模式,让代码变得更加优雅

一、简介

责任链模式(chain of responsebility): 多个不同的对象针对同一个请求进行有序的处理,直到某一个对象处理完成为止,这样形成了一条以对象组成的链

二、举例

Felix去某厂面试,该厂面试需要3轮面试筛选最终才能拿到offer,而每一轮的面试通过后需要下一轮的面试官继续面试,直到3面结束

流程图:

graph TD
start --> 1面 --> 2面 --> 3面  --> 结束 

三、代码实现

抽象Handler

public abstract class Handler {

    protected Handler handler;

    public void Handler(Handler handler) {
        this.handler = handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

    public Handler getHandler() {
        return handler;
    }

    public abstract void handleRequest();
}

第一个面试官

public class FirstInterview extends Handler{


    @Override
    public void handleRequest() {

        // 条件判断是否是属于当前Handler的处理范围之内,不是则向下传递Handler处理器
        if (getHandler() != null) {
            System.out.println("一轮面试通过");
            getHandler().handleRequest();
        }else {
            System.out.println("结束");
        }
    }
}

第二个面试官

public class SecondInterview extends Handler{
    @Override
    public void handleRequest() {
        // 条件判断是否是属于当前Handler的处理范围之内,不是则向下传递Handler处理器
        if (getHandler() != null) {
            System.out.println("二轮面试通过");
            getHandler().handleRequest();
        }else {
            System.out.println("结束");
        }
    }
}

第三个面试官

public class ThreeInterview extends Handler{

    @Override
    public void handleRequest() {

        // 条件判断是否是属于当前Handler的处理范围之内,不是则向下传递Handler处理器
        if (getHandler() != null) {
            getHandler().handleRequest();
        }else {
            System.out.println("三轮面试通过");
            System.out.println("面试结束,等待offer");
        }

    }
}

Main方法

public class Main {

    public static void interview(){
        Handler first = new FirstInterview();
        Handler second = new SecondInterview();
        Handler third = new ThreeInterview();
        first.setHandler(second);
        second.setHandler(third);
        first.handleRequest();
    }

    public static void main(String[] args) {
        interview();
    }
}

结果

一轮面试通过
二轮面试通过
三轮面试通过
面试结束,等待offer

四、总结

责任链模式保证每个待执行的对象按照设定的顺序执行,在每个对象中的各个业务都独立开了,每个对象承担不同的职责,只有通过了前一个对象的处理才能流向下一个设定的对象,如果新增了职责对象,只需要将新对象设定在当前Handler的处理范围内,代码维护性强,适合在流水线业务中使用