什么是责任链模式
当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任。这种情况下,我们可以考虑多个对象组成一条责任链,然后按照他们在职责链上的顺序一个一个地找出到底应该谁来负责处理。
例子
做蛋糕:
鸡蛋 一> 泡状物 一> 泡状混合物 一> 蛋糕
Something
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 蛋糕类
*/
public class Something {
private String txt;
public Something(String txt){
this.txt = txt;
}
public String getTxt(){
return txt;
}
public void setTxt(String txt){
this.txt = txt;
}
}
Handler接口
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 处理接口
*/
public interface Handler {
void process(Something something);
}
步骤一
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 步骤一
*/
public class HandlerOne implements Handler{
@Override
public void process(Something something) {
String txt = something.getTxt();
System.out.println("我现在是"+txt+",我要被打发成泡状了");
something.setTxt("泡状物");
}
}
步骤二
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 步骤二
*/
public class HandlerTwo implements Handler{
@Override
public void process(Something something) {
String txt = something.getTxt();
System.out.println("我现在是"+txt+",我要加配料了");
something.setTxt("泡状混合物");
}
}
步骤三
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 步骤三
*/
public class HandlerThree implements Handler{
@Override
public void process(Something something) {
String txt = something.getTxt();
System.out.println("我现在是"+txt+",我要进烤箱了");
something.setTxt("蛋糕");
}
}
步骤四
package BehavioralPattern.ChainOfResponsibilityMode;
/**
* 步骤四
*/
public class HandlerFour implements Handler{
@Override
public void process(Something something) {
String txt = something.getTxt();
System.out.println("我现在是"+txt+",制作完成");
}
}
处理链
package BehavioralPattern.ChainOfResponsibilityMode;
import java.util.ArrayList;
import java.util.List;
/**
* 处理链
*/
public class HandlerChain {
List<Handler> chain = new ArrayList<>();
public void addHandler(Handler handler){
chain.add(handler);
}
public void process(Something something){
for(Handler handler : chain){
handler.process(something);
}
}
}
结果
总结
责任链模式是一种把多个处理器组合在一起,依次处理请求的模式;
责任链模式的好处是添加新的处理器或者重新排列处理器非常容易;
责任链模式经常用在拦截、预处理请求等。