【HeadFirst 设计模式学习笔记】14 责任链模式拾零
2012-12-21 11:12
711 查看
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为处理者,只是名字不同而已)。
我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是FrontEnd 、IntermediateLayer 、Application :
首先我们要定义一个统一的获取帮助的接口:
interface HelpInterface{
public void getHelp(int helpConstant);
}
然后我们再定义三个帮助类型:
现在我们就可以定义处理逻辑了:
首先我们定义第一层FrontEnd:
它实现了HelpInterface接口,并且在初始化时定义了如果它无法处理时谁会随后接着处理(successor),在实现getHelp时判断帮助类型,若不是FrontEnd处理的则调用后继的getHelp,并把帮助类型传入,若是则进行处理(此处打印就表示为处理)。
然后我们定义第二层 IntermediateLayer ,思路也是一样的:
最后我们定义最后一层Application :
此处加入了一个空构造函数,表示此层可以为最后一层,不需要successor,当然可以删除设置successor的构造函数,此处是为了以后增加层数时而保留的接口。
于是我们就可以写一个程序测试一下了,从后往前创建处理层,并且分别指明后继:
结果是Application这层进行了处理。
在线视频:http://v.youku.com/v_show/id_XMjU2MTI1MDY4.html
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
出处:http://www.cnblogs.com/gnuhpc/
Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为处理者,只是名字不同而已)。
我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是FrontEnd 、IntermediateLayer 、Application :
首先我们要定义一个统一的获取帮助的接口:
interface HelpInterface{
public void getHelp(int helpConstant);
}
然后我们再定义三个帮助类型:
1: class HelpType {
2: public final static int FRONT_END_HELP = 1;
3: public final static int INTERMEDIATE_LAYER_HELP = 2;
4: public final static int GENERAL_HELP = 3;
5: }
6:
现在我们就可以定义处理逻辑了:
首先我们定义第一层FrontEnd:
1: class FrontEnd implements HelpInterface {
2: HelpInterface successor;
3:
4: public FrontEnd(HelpInterface s) {
5: successor = s;
6: }
7:
8: public void getHelp(int helpConstant) {
9: if (helpConstant != HelpType.FRONT_END_HELP) {
10: successor.getHelp(helpConstant);
11: } else {
12: System.out.println("front end");
13: }
14: }
15: }
它实现了HelpInterface接口,并且在初始化时定义了如果它无法处理时谁会随后接着处理(successor),在实现getHelp时判断帮助类型,若不是FrontEnd处理的则调用后继的getHelp,并把帮助类型传入,若是则进行处理(此处打印就表示为处理)。
然后我们定义第二层 IntermediateLayer ,思路也是一样的:
1: class IntermediateLayer implements HelpInterface {
2: HelpInterface successor;
3:
4: public IntermediateLayer(HelpInterface s) {
5: successor = s;
6: }
7:
8: public void getHelp(int helpConstant) {
9: if (helpConstant != HelpType.INTERMEDIATE_LAYER_HELP) {
10: successor.getHelp(helpConstant);
11: } else {
12: System.out.println("intermediate");
13: }
14: }
15: }
最后我们定义最后一层Application :
1: class Application implements HelpInterface {
2: HelpInterface successor;
3:
4: public Application(){
5:
6: }
7:
8: public Application(HelpInterface s){
9: successor = s;
10: }
11:
12: public void getHelp(int helpConstant) {
13: System.out.println("application");
14: }
15: }
此处加入了一个空构造函数,表示此层可以为最后一层,不需要successor,当然可以删除设置successor的构造函数,此处是为了以后增加层数时而保留的接口。
于是我们就可以写一个程序测试一下了,从后往前创建处理层,并且分别指明后继:
1: public class MainClass {
2: public static void main(String args[]) {
3:
4: Application app = new Application();
5:
6: IntermediateLayer intermediateLayer = new IntermediateLayer(app);
7:
8: FrontEnd frontEnd = new FrontEnd(intermediateLayer);
9:
10: frontEnd.getHelp(HelpType.GENERAL_HELP);
11: }
12: }
13:
结果是Application这层进行了处理。
在线视频:http://v.youku.com/v_show/id_XMjU2MTI1MDY4.html
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
相关文章推荐
- HeadFirst 设计模式学习笔记15--责任链模式拾零
- HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零
- 【HeadFirst 设计模式学习笔记】17 中介者(Mediator)模式拾零
- 【HeadFirst 设计模式学习笔记】18 原型(Prototype)模式拾零
- 【HeadFirst 设计模式学习笔记】19 桥接(Bridge)模式拾零
- HeadFirst 设计模式学习笔记17--建筑者(Builder)模式拾零
- 【HeadFirst 设计模式学习笔记】 20 解释者(Interpreter)模式拾零
- 【HeadFirst 设计模式学习笔记】21 备忘录(Memento)模式拾零
- HeadFirst 设计模式学习笔记16--享元模式拾零
- HeadFirst 设计模式学习笔记18--中介者(Mediator)模式拾零
- HeadFirst 设计模式学习笔记20--桥接(Bridge)模式拾零
- HeadFirst 设计模式学习笔记14——MVC分析
- HeadFirst 设计模式学习笔记19--原型(Prototype)模式拾零
- 【HeadFirst 设计模式学习笔记】15 享元模式拾零
- HeadFirst 设计模式学习笔记21-- 解释者(Interpreter)模式拾零
- 【HeadFirst 设计模式学习笔记】16 建筑者(Builder)模式拾零
- HeadFirst 设计模式学习笔记9--责任链模式
- HeadFirst 设计模式学习笔记8--模板方法模式
- 设计模式学习笔记——责任链模式
- 设计模式学习笔记--责任链模式