设计模式之Chain ofResponsibility -职责链

来源:互联网 发布:矩阵奇艺是什么意思 编辑:程序博客网 时间:2024/05/20 03:41



 

在责任链模式中,很多对象由每一个对象对其下家的引用而接 起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。

 

晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的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交给老师

0 0
原创粉丝点击