责任链模式
该模式构造一系列分别担当不同职责类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密联系,因此称为责任链模式。职责链将请求的发送者和请求的处理者解耦了。
优点
每个类只需要处理自己该处理的工作,不该自己处理的交由下一个对象完成
可以根据工作需要自由组合工作流程,如果流程发生改变,可以通过重新分配对象链便可以适应新的工作流程。
类与类之间可以以松耦合的方式加一组织
缺点
降低程序的性能。每个请求都是从链头遍历到链尾,当链比较长的时候,性能会大幅下降。
不易于调试。由于该模式采用了类似递归的方式,调试的时候逻辑比较复杂。
代码
package com.fanyinhang.socket;
/**
* @author fanyinhang
* @version 1.0
* @create 2019/10/10-22:09
*/
abstract class Handler{
private Handler nextHandler;
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void requestHandler();
}
class ConcreteHandlerA extends Handler{
@Override
public void requestHandler() {
System.out.println(this.getClass().getSimpleName()+"处理器处理");
if(getNextHandler()!=null){
getNextHandler().requestHandler();
}
}
}
class ConcreteHandlerB extends Handler{
@Override
public void requestHandler() {
System.out.println(this.getClass().getSimpleName()+"处理器处理");
if(getNextHandler()!=null){
getNextHandler().requestHandler();
}
}
}
public class ChainPattern {
public static void main(String[] args) {
Handler handlerA=new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNextHandler(handlerB);
handlerA.requestHandler();
}
}
输出结果
ConcreteHandlerA处理器处理
ConcreteHandlerB处理器处理
应用场景
一个请求需要一系列的处理工作
业务流的处理
对系统进行扩展补充。