设计模式十五--责任链模式
2019-03-30 本文已影响1人
朽木亦自雕
定义
使多个对象都有机会处理到请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,知道有对象处理它为止。
责任链模式的角色
1:抽象处理者角色(Handler)
该角色对请求进行抽象,并定义一个方法以设定和返回对下一个处理者的引用。
public abstract class Handler{
private Handler handler;
//处理请求的方法
public abstract void handleRequest();
public Handler getHandler(){
return successor();
}
public void setHandler(Handler handler){
this.handler = handler;
}
}
2:具体处理者(ConcreateHandler)
该角色接到请求后,可以选择将请求处理掉,或者将请求传递给下一个处理者。
public class ConcreateHandler extends Handler{
public void handerRequest(){
Handler handler;
if((handler = getHandler()) != null){
System.out.println("请求传递给下一层处理");
handler.handleRequest();
}else{
System.out.println("请求已经处理");
}
}
}
客户端代码:
public class Client{
public static void main(String [] args){
Handler handler1 = new ConcreateHandler();
handler handler2 = new ConcreateHandler();
h1.setHandler(handler2);
h1.handlerRequest();
}
}
优点
1:责任链将请求和处理分开,请求者不知道是谁处理,处理者可以不知道请求者的全貌。
2:提高系统的灵活性。
缺点
1:降低系统的性能,当调用链比较长的时候回大幅度降低系统的性能。
2:不易于调试,采用类似递归的场景,调试的时候逻辑复杂。
使用场景
经典应用:Strust2的核心控件FilterDispatcher
1:一个请求需要一系列的处理工作的。
2:业务流的处理,比如,审批流(击鼓传花)。
3:对系统进行补充扩展的时候。
参考资料:设计模式(java)