您的位置:首页 > 大数据 > 人工智能

设计模式之Chain ofResponsibility -职责链

2014-03-17 15:46 375 查看





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

晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的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交给老师
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: