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

定义

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

责任链模式的角色

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)

你可能感兴趣的:(设计模式十五--责任链模式)