在责任链模式中,很多对象由每一个对象对其下家的引用而接 起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!
===============================================
被执行的对象,请求接口
package Chain.of.Responsibility;
//请求:被执行者
public class Request {
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void execute(){
}
}
====================================================
被执行的对象,请求接口的实现者一
package Chain.of.Responsibility;
public class EatRequest extends Request {
public void eatRequest(){
System.out.println("我 请求吃饭");
}
}
====================================================
被执行的对象,请求接口的实现者二
package Chain.of.Responsibility;
public class PrintRequst extends Request {
public void printRequest(){
System.out.println("print print request request");
}
}
======================================================
被执行的对象,请求接口的实现者三
package Chain.of.Responsibility;
public class HelpRequest extends Request {
public void helpRequest(){
System.out.println("request正在寻求大家的帮助");
}
}
======================================================
package Chain.of.Responsibility;
//请求执行者,请求在这两个接口方法之间默认调用
public interface Handler{
//最后默认调用的类
public void handle(Request request);
public void handleRequest(Request request);
}
====================================================
请求执行者,具体请求在请求链中执行的过程
package Chain.of.Responsibility;
public class ConcreteHandler implements Handler{
public void handleRequest(Request request){
if (request instanceof HelpRequest)
{
((HelpRequest) request).helpRequest();
}else if (request instanceof PrintRequst)
{
((PrintRequst) request).printRequest();
}else
{
//传递到下一个
this.handle(request);
}
}
@Override
public void handle(Request request)
{
System.out.println("请把这个request交给老师");
}
}
=========================================
测试接口
package Chain.of.Responsibility;
public class TestMain {
public static void main(String[] args) {
EatRequest request = new EatRequest();
ConcreteHandler concreteHandler = new ConcreteHandler();
concreteHandler.handleRequest(request);
}
}
=========================================
程序运行后的结果 请把这个request交给老师