您的位置:首页 > 编程语言 > Java开发

设计模式--责任链模式

2016-04-08 00:00 387 查看
摘要: 简单记录责任链模式的使用。

责任链模式(chain of responsibility):

有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。

注意点:

链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象。

示例:

责任链模式测试类 ChainOfResponsibilityTest.java

/**
* 责任链模式测试类
*
* @author Kevin
* @date 2016-3-15
*/
public class ChainOfResponsibilityTest {

public static void main(String[] args) {
HandlerImpl ceoHandler = new HandlerImpl("CEO");
HandlerImpl ctoHandler = new HandlerImpl("CTO");
HandlerImpl pmHandler = new HandlerImpl("PM");
HandlerImpl coderHandler = new HandlerImpl("coder");

ceoHandler.setHandler(ctoHandler);
ctoHandler.setHandler(pmHandler);
pmHandler.setHandler(coderHandler);

ceoHandler.handleRequest();
}
}

处理者接口类Handler.java

/**
* 处理者接口
*
* @author Kevin
* @date 2016-3-15
*/
public interface Handler {

/**
* 处理请求
*
* @author Kevin
*/
void handleRequest();

}

抽象处理者类AbstractHandler.java

/**
* 抽象处理者类
*
* @author Kevin
* @date 2016-3-15
*/
public abstract class AbstractHandler {

/* 处理者 */
private Handler handler;

public Handler getHandler() {
return handler;
}

public void setHandler(Handler handler) {
this.handler = handler;
}

}

处理者实现类HandlerImpl.java

/**
* 处理者实现类
*
* @author Kevin
* @date 2016-3-15
*/
public class HandlerImpl extends AbstractHandler implements Handler {

/* 名称 */
private String name;

public HandlerImpl(String name) {
this.name = name;
}

@Override
public void handleRequest() {
System.out.println(name + " deal!");
Handler handler = getHandler();
if (null != handler) {
handler.handleRequest();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息