【HeadFirst 设计模式学习笔记】14 责任链模式拾零

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为处理者,只是名字不同而已)。

【HeadFirst 设计模式学习笔记】14 责任链模式拾零

我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是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/


               作者:gnuhpc
               出处:http://www.cnblogs.com/gnuhpc/
               除非另有声明,本网站采用知识共享“署名 2.5 *”许可协议授权。


分享到:

上一篇:如果$.ajax函数迟迟得不到响应,那么最有可能出错的地方是请求参数写错了


下一篇:C#和JavaScript交互(asp.net前台和后台互调)总结 (转)