责任链模式里,很多对象由每一个对象对其下家的引用二连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,使得系统在不影响客户端的情况下动态地重新组织链和分配责任
纯与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:
一个是承担责任,二是把责任推给下一家。不允许出现某一个具体处理对象在承担了一部分责任后又把责任向下传的情况
在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收
public abstract class Handler {
protected Handler successor;
/**
* 处理方法,调用此方法处理请求
*/
public abstract void handleRequest();
/**
* 赋值方法,调用此方法设定下家
*/
public void setSuccessor(Handler successor) {
this.successor = successor;
}
/**
* 取值方法
*/
public Handler getSuccessor() {
return successor;
}
}
public class ConcreteHandler extends Handler {
private String name;
public ConcreteHandler() {
}
public ConcreteHandler(String name) {
this.name = name;
}
/**
* 处理方法,调用此方法处理请求
*/
@Override
public void handleRequest() {
if (getSuccessor() != null) {
System.out.println("the request is passed to " + getSuccessor());
getSuccessor().handleRequest();
} else {
System.out.println("the request is handled by " + this.name);
}
}
@Override
public String toString() {
return this.name;
}
}
public class Client {
private static Handler handler1, handler2,handler3;
/**
* 客户端创建了三个处理对象,并指定第一个处理者对象的下一家是第二个处理对象,
* 第二个处理对象的下一家是第三个处理对象,第三个处理对象没有下家,第三个对象自行处理请求
*/
public static void main(String[] args) {
handler1 = new ConcreteHandler("handler1");
handler2 = new ConcreteHandler("handler2");
handler3 = new ConcreteHandler("handler3");
handler1.setSuccessor(handler2);
handler2.setSuccessor(handler3);
handler1.handleRequest();
}
}
分享到:
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
spring责任链模式详解,包含项目中应用
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
职责链模式 设计模式 Chain of Responsibility 若有问题望指出。
责任链模式代码
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
责任链模式demo
C# 职责链模式 代码 模型代码,学习。
责任链模式的小例子
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
设计模式的责任链模式的例子,希望对大家有用~~~~~~~~
责任链模式小demo
责任链模式 C++ 实现
设计模式之责任链模式Java版本实现和UML类图设计
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
设计模式之责任链模式,使用形象化例子来解释说明。
设计模式C++学习之责任链模式(Chain of Responsibility)