责任链模式:将请求封装成一个对象,使得多个对象都有机会对该对象进行处理,这些对象组成一条链状结构,请求延着链条进行传递。
优点:去除冗余的if-else语句,对请求的发出者和请求的接收者进行解耦,通过类间继承关系进行扩展
标准类图:
抽象处理者:
public abstract class Handler {
private Handler handler;
public void setNext(Handler handler){
this.handler = handler;
}
public void handleRequest(String type){
if(isHandle(type)){
this.handle();
}else{
this.handler.handle();
}
}
public abstract void handle();
public abstract boolean isHandle(String type);
}
具体的处理者:
public class ConcreteHandler1 extends Handler{
private static final String CURRENT_TYPE = "1";
@Override
public void handle() {
System.out.println(this.getClass().getSimpleName() + " is dealing");
}
@Override
public boolean isHandle(String type) {
return CURRENT_TYPE.equals(type);
}
}
public class ConcreteHandler2 extends Handler{
private static final String CURRENT_TYPE = "2";
@Override
public void handle() {
System.out.println(this.getClass().getSimpleName() + " is dealing");
}
@Override
public boolean isHandle(String type) {
return CURRENT_TYPE.equals(type);
}
}
场景类:
public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
handler1.setNext(handler2);
handler1.handleRequest("2");
}
}
高层调用者不用关心具体的请求是被哪个接收者进行处理,请求会自动的被满足条件的接收者处理