定义
使多个对象都有机会处理到请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,知道有对象处理它为止。
责任链模式的角色
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)
文章转载于:https://www.jianshu.com/p/14b9aa532b28
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~