Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为处理者,只是名字不同而已)。
我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是FrontEnd 、IntermediateLayer 、Application :
首先我们要定义一个统一的获取帮助的接口:
interface HelpInterface{
public void getHelp(int helpConstant);
}
然后我们再定义三个帮助类型:
1:classHelpType {
2:publicfinalstaticint FRONT_END_HELP = 1;
3:publicfinalstaticint INTERMEDIATE_LAYER_HELP = 2;
4:publicfinalstaticint GENERAL_HELP = 3;
5: }
6:
现在我们就可以定义处理逻辑了:
首先我们定义第一层FrontEnd:
1:classFrontEndimplementsHelpInterface {
2: HelpInterface successor;
3:
4:publicFrontEnd(HelpInterface s) {
5: successor = s;
6: }
7:
8:publicvoidgetHelp(inthelpConstant) {
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:classIntermediateLayerimplementsHelpInterface {
2: HelpInterface successor;
3:
4:publicIntermediateLayer(HelpInterface s) {
5: successor = s;
6: }
7:
8:publicvoid 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:classApplicationimplementsHelpInterface {
2: HelpInterface successor;
3:
4:publicApplication(){
5:
6: }
7:
8:publicApplication(HelpInterface s){
9: successor = s;
10: }
11:
12:publicvoidgetHelp(inthelpConstant) {
13: System.out.println("application");
14: }
15: }
此处加入了一个空构造函数,表示此层可以为最后一层,不需要successor,当然可以删除设置successor的构造函数,此处是为了以后增加层数时而保留的接口。
于是我们就可以写一个程序测试一下了,从后往前创建处理层,并且分别指明后继:
1:publicclassMainClass {
2:publicstaticvoidmain(String args[]) {
3:
4: Application app =newApplication();
5:
6: IntermediateLayer intermediateLayer =newIntermediateLayer(app);
7:
8: FrontEnd frontEnd =newFrontEnd(intermediateLayer);
9:
10: frontEnd.getHelp(HelpType.GENERAL_HELP);
11: }
12: }
13:
结果是Application这层进行了处理。
在线视频:http://v.youku.com/v_show/id_XMjU2MTI1MDY4.html
分享到:
相关推荐
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
HeadFirst 设计模式学习笔记2--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx
http://blog.csdn.net/laszloyu/archive/2010/05/11/5579765.aspx 示例代码
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
Head First 设计模式学习笔记。更多内容请参见文章内容。
Head.First 设计模式学习笔记.pdf Head.First 设计模式学习笔记.pdf
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
NULL 博文链接:https://chxiaowu.iteye.com/blog/1276845
设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式
学习设计模式时,做的笔记,主要参考了《Head First设计模式》
最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二...
近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二...
VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...
Head First学习笔记+Head First之装饰者模式高清PDF
设计模式、设计模式 可复用面向对象软件的基础,实现了 Gof 的 23 种设计模式。 内容包括三大原则(继承、封装、多态)、类图、设计原则。 数据库 :floppy_disk: 参考 数据库系统原理。 参考 SQL 必知必会。 ...
学习笔记都在这里了 好好学习,天天向上!生命不息,阅读不止! 本仓库参考以下书籍或资料 JavaScript高级程序设计(第三版) You don't know JS 系列 ES6 标准入门 Node.JS深入浅出 图解HTTP HTTP权威指南 Head First...