纵有疾风起
人生不言弃

设计模式十五–责任链模式

定义

使多个对象都有机会处理到请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,知道有对象处理它为止。

责任链模式的角色

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

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式十五–责任链模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录