- 浏览: 67965 次
- 性别:
- 来自: 上海
最新评论
-
java苹果+番茄:
已经修改,感谢大家提的意见;有一年多没进来了,很惭愧;以后一定 ...
java设计模式笔记链接地址汇总 -
youthon:
命令(Command)模式【行为模式第九篇】的链接应为http ...
java设计模式笔记链接地址汇总 -
youthon:
你给的链接只有你自己才能打开,你改改吧
java设计模式笔记链接地址汇总 -
shaozhi_jinni:
[b][/b][i][/i][u][/u]引用引用
[img ...
模板方法(Template Method)模式【行为模式第十篇】 -
Tank03:
慢慢的走~
android开发学习中(已经学会了几个小玩意),兴趣大增
责任链(Chain of Responsibility)模式
责任链模式是一种对象行为模式。
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
责任链模式的角色:
1、抽象处理者角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由
一个java抽象类或者java接口实现。
2、具体处理者角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家,由于具体处理者持有对下家的引用,因此
,如果需要,具体处理者可以访问下家。
纯的与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家。
不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接受,在一个不纯的责任链模式里面,一个请求可以最终不被
任何接受端对象所接收。
在下面的情况下可以使用责任链模式:
(1)系统已经有一个由处理者对象组成的链。这个链可能由合成模式给出。
(2)有多于一个的处理者对象会处理一个请求,而且事先并不知道到底由哪一处理者对象处理一个请求。
这个处理者对象是动态确定的。
(3)系统想发出一个请求给多个处理者对象中的某一个,但是不明显指定是哪一个处理者对象会处理此请求。
(4)处理一个请求的处理者对象的集合需要动态地指定时。
责任链模式降低了发出命令的对象和处理命令的对象之间的耦合,它允许多于一个的处理者对象根据自己的逻辑来决定
哪一个处理者最终处理这个命令。换言之,发出命令的对象只是把命令传给链结构的起始者,而不需要知道到底是链上
的哪一个节点处理了这个命令。
显然。这意味着在处理命令时,允许系统有更多的灵活性。哪一个对象最终处理一个命令可以因为由哪些对象参加责任链,
以及这些对象在责任链上的位置不同而有所不同。
责任链模式是一种对象行为模式。
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
责任链模式的角色:
1、抽象处理者角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由
一个java抽象类或者java接口实现。
2、具体处理者角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家,由于具体处理者持有对下家的引用,因此
,如果需要,具体处理者可以访问下家。
//抽象处理者 public abstract class Hander{ //处理方法,调用此方法处理请求 protected Handle successor; public abstract void handleRequest(); //调用此方法,设定下家 public void setSuccessor(Handler successor){ this.successor = successor; } public Handler getSuccessor(){ return successor; } } //具体处理者 public class ConcreteHandler extends Handler{ public void handlerRequest(){ if(getSuccessor() != null){ System.out.println("The request is passed to " + getSuccessor()); getSuccessor().handlerRequest(); }else{ System.out.println("The request is handled here."); } } } //客户端 public class Client{ private static Handler handler1, handler2; public static void main(String args[]){ handler1 = new ConcreteHandler(); handler2 = new ConcreteHandler(); handler1.setSuccessor(handler2); handler1.handleRequest(); } }
纯的与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家。
不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接受,在一个不纯的责任链模式里面,一个请求可以最终不被
任何接受端对象所接收。
//一个贾家击鼓传花喝酒的例子 //击鼓者(客户端) public class DrumBeater{ private static Player player; public static void main(String[] args){ //创建责任链 player = new JiaMu(new JiaShe(new JiaZheng(new JiaBaoYu(new JiaHuan(null))))); //规定由第四个处理者处理请求 player.handler(4); } } 抽象传花者 public abstract class Player{ public abstract void handler(int i); private Player successor; public Player(){ successor = null; } protected void setSuccessor(Player aSuccessor){ successor = aSuccessor; } //将花传给下家,如果没有下家,系统停止运行 public void next(int index){ //判断下家对象是否有效 if(successor != null){ //将请求传给下家 successor.handler(index); }else{ //系统停止运行 System.out.println("Program terminated."); System.exit(0); } } } //JiaMu类 public class JiaMu extends Player{ public JiaMu(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handler(int i){ if(i == 1){ System.out.println("Jia Mu gotta drink!"); }else{ System.out.println("JiaMu passed!"); next(i); } } } //JiaShe public class JiaShe extends Player{ public JiaShe(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handler(int i){ if(i == 2){ System.out.println("Jia She gotta drink!"); }else{ System.out.println("Jia She passed!"); next(i); } } } public class JiaZheng extends Player{ public JiaZheng(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handler(int i){ if(i == 3){ System.out.println("Jia Zheng gotta drink!"); }else{ System.out.println("Jia Zheng passed!"); next(i); } } } public class JiaBaoYu extends Player{ public JiaBaoYu(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handler(int i){ if(i == 4){ System.out.println("Jia Bao Yu gotta drink!"); }else{ System.out.println("Jia Bao Yu passed!"); next(i); } } } public class JiaHuan extends Player{ public JiaHuan(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handler(int i){ if(i == 5){ System.out.println("Jia Huan gotta drink!"); }else{ System.out.println("Jia Huan passed!"); next(i); } } }
在下面的情况下可以使用责任链模式:
(1)系统已经有一个由处理者对象组成的链。这个链可能由合成模式给出。
(2)有多于一个的处理者对象会处理一个请求,而且事先并不知道到底由哪一处理者对象处理一个请求。
这个处理者对象是动态确定的。
(3)系统想发出一个请求给多个处理者对象中的某一个,但是不明显指定是哪一个处理者对象会处理此请求。
(4)处理一个请求的处理者对象的集合需要动态地指定时。
责任链模式降低了发出命令的对象和处理命令的对象之间的耦合,它允许多于一个的处理者对象根据自己的逻辑来决定
哪一个处理者最终处理这个命令。换言之,发出命令的对象只是把命令传给链结构的起始者,而不需要知道到底是链上
的哪一个节点处理了这个命令。
显然。这意味着在处理命令时,允许系统有更多的灵活性。哪一个对象最终处理一个命令可以因为由哪些对象参加责任链,
以及这些对象在责任链上的位置不同而有所不同。
//一个使用Timer的例子 import java.util.Timer; import java.util.TimerTask; public class Reminder{ Timer timer; //构造子,在seconds秒后执行一个任务 public Reminder(int seconds){ timer = new Timer(); timer.schedule(new RemindTask(),seconds*1000); //schedule(清单,目录) } //内部成员类,描述将要执行的任务 class RemindTask extends TimerTask{ public void run(){ System.out.println("Time's up!"); timer.cancle(); } } public static void main(String[] args){ System.out.println("About to schedule task."); new Reminder(5); System.out.println("Task scheduled."); } } //Timer类是线程安全的,换言之,可以有多个线程共享同一个Timer对象,而不需要同步化。这是使用Timer的一个好处。 //击鼓者(相当于客户端) import java.lang.Thread; import java.util.Timer; import java.util.TimerTask; public class DrumBeater{ private static Player firstPlayer; public static boolean stopped = false; Timer timer; public static void main(String[] args){ DrumBeater drumBeater = new DrumBeater(); JiaMu jiaMu = new JiaMu(null); JiaMu.setSuccessor(new JiaShe(new JiaZheng(new JiaBaoYu(new JiaHuan(jiaMu))))); //开始击鼓过程 drumBeater.startBeating(1); //由贾母开始传花 firstPlayer = jiaMu; firstPlayer.handle(); } //调用下面方法,开始击鼓过程 public void startBeating(int stopInSeconds){ System.out.println("Drum beating started..."); timer = new Timer(); timer.schedule(new StopBeatingReminder(),stopInSeconds*1000); } //内部成员类,描述停止击鼓的任务 class StopBeatingReminder extends TimerTask{ public void run(){ System.out.println("Drum beating stopped!"); stopped = true; timer.cancel(); } } } //抽象传花者类 public abstract class Player{ public abstract void handle(); private Player successor; public Player(){ successor = null; } protected void setSuccessor(Player aSuccessor){ successor = aSuccessor; } public void next(){ //判断下家对象是否有效 if(successor != null){ //将请求传给下家 successor.handle(); }else{ //系统停止运行 System.out.println("Program is terminating."); System.exit(0); } } } //贾母 public class JiaMu extends Player{ public JiaMu(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handle(){ //检查是否击鼓已经停止] if(DrumBeater.stopped){ System.out.pritntln("Jia Mu gotta drink!"); }else{ System.out.println("Jia Mu passed!"); next(); } } } ...................... public class JiaHuan extends Player{ public JiaHuan(Player aSuccessor){ this.setSuccessor(aSuccessor); } public void handle(){ //检查是否击鼓已经停止] if(DrumBeater.stopped){ System.out.println("Jia Huan gotta drink!"); }else{ System.out.println("Jia Huan passed!"); next(); } } }
发表评论
-
java设计模式笔记链接地址汇总
2009-10-24 14:46 2294各位,这些笔记已经生成了pdf,如果有兴趣的可以在本文末尾下载 ... -
MVC模式【行为模式第十三篇】
2009-10-23 23:36 1517MVC模式:就是模型-视 ... -
状态(State Pattern)模式【行为模式第十二篇】
2009-10-23 23:35 1371状态(State Pattern)模式:又称为状态对象模式,状 ... -
模板方法(Template Method)模式【行为模式第十篇】
2009-10-23 23:32 1229模板方法(Template Method)模式 模板方法模式 ... -
命令(Command)模式【行为模式第九篇】
2009-10-23 23:31 1416命令(Command)模式: ... -
解释器(Interpreter)模式【行为模式第八篇】
2009-10-23 23:29 1111解释器(Interpreter)模 ... -
观察者(Observer)模式【行为模式第七篇】
2009-10-23 23:28 1280观察者(Observer)模式 ... -
访问者(Visitor)模式【行为模式第六篇】
2009-10-23 23:26 1134访问者(Visitor)模式: 访问者模式是对象的行为模式。 ... -
迭代子(Iterator)模式【行为模式第五篇】
2009-10-23 23:25 1536迭代子(Iterator)模式: 迭代子模式又叫游标(Cur ... -
调停者(Mediator)模式 【行为模式第四篇】
2009-10-23 23:23 2676调停者(Mediator)模式 调停者模式是对象的行为模式。 ... -
策略(Strategy)模式 【行为模式第三篇】
2009-10-23 23:22 1541策略(Strategy)模式 策略模式属于对象的行为模式。其 ... -
不变(Immutable)模式【行为模式第二篇】
2009-10-23 23:21 1704不变(Immutable)模式 一个对象的状态在对象被创建之 ... -
备忘录(Memento Pattern)模式 【行为模式第一篇】
2009-10-23 23:19 1994备忘录(Memento Pattern)模式 备忘录模式又叫 ... -
适配器模式举例【结构模式第八篇】
2009-10-23 23:17 1055XMLProperties与适配器模式举例: //---- ... -
适配器模式【结构模式第六篇】
2009-10-23 23:12 1208适配器模式(Adapter Pattern)(另称-变压器模式 ... -
桥梁(Bridge)模式【结构模式第五篇】
2009-10-23 23:09 1368桥梁(Bridge)模式: 一、桥梁模式的用意 桥梁模式 ... -
门面(Facade)模式【结构模式第四篇】
2009-10-23 23:08 1240门面(Facade)模式: 是对象的结构模式。外部与一个子系 ... -
亨元(Flyweight Pattern)模式【结构模式第三篇】
2009-10-23 23:07 1189亨元(Flyweight Pattern) ... -
合成(Composite)模型模式【结构模式第二篇】
2009-10-23 23:04 1400合成(Composite)模型模式: 属于对象的结构模式,有 ... -
代理(Proxy)模式 【结构模式第一篇】
2009-10-23 23:02 1408代理(Proxy)模式 是对 ...
相关推荐
创建型: 1. 单件模式(Singleton ... 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它使你能在不指定接收者的情况下,将请求沿着处理者链进行发送。每个处理者都包含对下一个处理者的引用,允许请求在链中传递,直到被某个处理者...
第16章 责任链模式(Chain of Responsibility) 16.1 模式解说 16.2 结构和用法 16.2.1 模式结构 16.2.2 代码模板 16.2.3 问题讨论 16.3 范例与实践 16.3.1 责任链模式在项目审批系统中的应用 16.3.2 责任链...
第16章 责任链模式(Chain of Responsibility) 16.1 模式解说 16.2 结构和用法 16.2.1 模式结构 16.2.2 代码模板 16.2.3 问题讨论 16.3 范例与实践 16.3.1 责任链模式在项目审批系统中的应用 ...
责任链模式 (Chain of Responsibility Pattern) 责任链模式是一种行为型模式,使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。通过将接收对象连成一条链并沿着这条链传递请求,直到有一...
行为型模式则关注对象之间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 "Java设计模式第二版源码"可能包含了这些模式的实例,每个模式都通过...
3. **行为型模式**:这类模式主要涉及对象间责任分配和交互,包括责任链(Chain of Responsibility)、命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)、观察...
17. 职责链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 18. 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕捉一个对象的内部...
3. **行为型模式**:如策略模式(Strategy)、观察者模式(Observer)、责任链模式(Chain of Responsibility)等。这些模式关注对象之间的交互和职责分配,有助于实现灵活的程序架构。 4. **设计原则**:包括单一...
11. **职责链模式**(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起,让多个对象都有可能处理这个请求。Java中的异常处理机制就体现了职责链模式。 以上仅是《Headfirst设计模式》中部分核心...
12. **责任链模式(Chain of Responsibility)**:Spring AOP中的通知(Advice)链可以被视为责任链模式的应用,每个通知都可以选择处理请求或将其传递给下一个通知。 13. **观察者模式(Observer)**:Spring AOP...
8.3.2 Chain of Responsibility模式 8.4 Model-View-Controller 8.4.1 ViewModel模式 8.4.2 ASP.NET MVC框架 8.4.3 利用AutoMapper映射ViewModel 8.4.4 Castle MonoRail 8.5 Page Controller模式 8.6 小结 ...
14. **Chain of Responsibility(责任链)模式**:让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 15. **Memento(备忘录)模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,...
#### 十三、责任链模式(Chain of Responsibility) **定义:** 责任链模式是一种行为型设计模式,允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条...
2. 责任链模式(Chain of Responsibility):允许将请求沿着处理者对象的链式结构传递,直到被某个对象处理。 3. 策略模式(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以互相替换。 《设计模式》...
设计模式之 Chain of Responsibility(责任链) 各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个. 设计模式之 Mediator(中介) Mediator 很象十字路口的红绿灯,每个车辆只需和红绿灯交互...
#### 第17章 责任链模式(Chain of Responsibility Pattern) 责任链模式是一种行为型设计模式,它让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 ##### 描述 责任链模式通过构建一个...
责任链模式(Chain of Responsibility) 责任链模式允许多个处理者处理请求。请求沿着处理者链传递,直到其中一个处理者处理它为止。这种模式通常用于处理事务流程或消息传递。例如,在处理用户请求时,可以按顺序...