南京设计网站的公司贵州公司网站开发
一、定义:属于行为型设计模式,包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点;
二、UML图
三、实现
1、需要传递处理的数据类
import java.util.Date;/*** 需要处理的数据信息*/
public class RequestData {private Long id;private String message;private Date date;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}@Overridepublic String toString() {return "RequestData{" +"id=" + id +", message='" + message + '\'' +", date=" + date +'}';}
} 
2、抽象处理类(也可以是接口)
public abstract class AbstractRequestDataHandler {                                     protected AbstractRequestDataHandler next;                                         public AbstractRequestDataHandler getNext() {                                      return next;                                                                   }                                                                                  public void setNext(AbstractRequestDataHandler next) {                             this.next = next;                                                              }                                                                                  /**                                                                                * 抽象的处理方法,传入需要处理的数据类                                                              *                                                                                 * @param data                                                                     */                                                                                public abstract void handler(RequestData data);                                    }                                                                                       
3、具体处理实现
public class RequestDataHandlerA extends AbstractRequestDataHandler {@Overridepublic void handler(RequestData data) {System.out.println("处理类A!");String message = data.getMessage().replace("A", "");data.setMessage(message);if (next != null) {next.handler(data);} else {System.out.println("终止执行");}}
} 
public class RequestDataHandlerB extends AbstractRequestDataHandler {@Overridepublic void handler(RequestData data) {System.out.println("处理类B!");String message = data.getMessage().replace("B", "");data.setMessage(message);if (next != null) {next.handler(data);} else {System.out.println("终止执行");}}
} 
public class RequestDataHandlerC extends AbstractRequestDataHandler {@Overridepublic void handler(RequestData data) {System.out.println("处理类C!");String message = data.getMessage().replace("C", "");data.setMessage(message);if (next != null) {next.handler(data);} else {System.out.println("终止执行");}}
} 
4、客户端
public class ChainResponsibilityClient {public static void main(String[] args) {AbstractRequestDataHandler handler1 = new RequestDataHandlerA();AbstractRequestDataHandler handler2 = new RequestDataHandlerB();AbstractRequestDataHandler handler3 = new RequestDataHandlerC();//生成调用链条handler1.setNext(handler2);handler2.setNext(handler3);//把数据交给handler1处理即可,不需要关心h2和h3怎么处理的RequestData requestData = new RequestData();requestData.setMessage("ABCDE");handler1.handler(requestData);System.out.println(requestData.getMessage());}
} 
四、责任链模式需要注意的地方
1、循环调用,比如下列代码会造成循环调用:
  //生成调用链条handler1.setNext(handler2);handler2.setNext(handler3);handler3.setNext(handler1); 
2、链条太长可能会导致的性能问题
3、责任链的顶端和低端节点之间不应该存在耦合问题
