网站多大够用,网站开发培训网站,哪个平台建网站比较好,seo流量软件一、定义#xff1a;属于行为型设计模式#xff0c;包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点#xff1b;
二、UML图 三、实现
1、需要传递处理的数据类
import java.util.Date;/*** 需要处理的数据信息*/
public class RequestData {priva…一、定义属于行为型设计模式包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点
二、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、责任链的顶端和低端节点之间不应该存在耦合问题