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的处理范围内,代码维护性强,适合在流水线业务中使用