现在位置: 首页 > 所有2012年发表的文章
Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为处理者,只是名字不同而已)。 我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是FrontEnd 、Inter...
阅读全文
1.M-V-C ——Model--View--Controller,模式-视图-控制器,这是一种范型。模型对象正是应用系统存在的理由,你设计的对象,包含了数据、逻辑和其他在你的应用领域创建定制的类。视图通常是控件,用来显示和编辑,控制器位于二者中间,负责将每个改变的状态送进送出。而学习设计模式是理解MVC的钥匙。书中用一个iTunes的例子直观描述了MVC: 2.MVC的基本原理: 视图:用来呈现模型。视图通常直接从模型中取得它需要显示的数据。 ...
阅读全文
1.在这一章中,我们要通过一个例子把前边学习过的设计模式串一遍,以一种需求不断叠加的实际工作场景为背景。首先我们还是把我们第一个模式所举的鸭子的例子搬出来,我们要创建一个模拟器对这些鸭子的叫声进行模拟: 首先我们设计一个呱呱叫的接口: public interface Quackable { public void quack(); } 接着我们让一些类实现这个接口——一些鸭子有这样的功能。 public class MallardDuck implements Quackable { pu...
阅读全文
1.这一节的任务是我们需要完成对上一节的糖果机产生一个机器状况和余量的报告,若这个报告在本地(不是通过Internet)生成的话,那么我们的设计就很简单了,在糖果机中加入Location的信息,并且创建一个类GumballMonitor 完成报告的生成: public class GumballMonitor { GumballMachine machine; public GumballMonitor(GumballMachine machine) { this.machine = machine; } public void report() { S...
阅读全文
1.我们这次的话题是要实现一个糖果机,这个糖果机中如下的一些状态以指导糖果机的转移: 我们根据这个状态机写了一个有if..else为主体的状态机程序,对每一个状态的转入转出做了实现: public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT; int count = 0; publi...
阅读全文
1.我们接着上次的话题,现在有一个新需求就是子菜单功能。我们在此使用一个新的模式——组合模式,意思是允许你将对象组合成树形结构来表现整体-局部的层级,它能使客户以一致的方式处理个别对象以及对象的组合。你告诉顶层的动作,它会完成所有相关的操作。这也就是这个模式使用的场景。在这个例子中,分为菜单和菜单项,一个菜单中可能还有菜单,而且一个菜单中可能还有多个菜单项,但是菜单项不会再有下一层的包含关系。 2.一...
阅读全文
1.本节的一个话题引子是一个餐厅,它提供早餐和午餐,但是在订制菜单的时候,早餐(Pancake)和午餐(Dinner)的实现却造成了一些麻烦。订制早餐的菜单是用ArrayList这样一个数据池来维护的。但是订制午餐的菜单则是一个标准数组进行维护。那么在设计订餐程序来遍历这两个不同的数据结构形成的菜单的时候,就会比较麻烦,毕竟返回的数据类型不是一样的。(不知道我说清楚了没,参阅英文版原书P321) 2.对于这样的迭代场景,我们...
阅读全文
1.这个模式比较简单,我们举一个银行贷款申请流程程序的例子(这个并非是书中的例子): 申请贷款,银行要检查这个客户的一些事宜,譬如客户收支状况记录、从三个地方拿到他的信用记录、得到其他已有相关债务信息、得到借债人股票市值、得到借债人未来收入预期分析等等。我们可以设计如下一个模板方法: abstract class CheckBackground { public abstract void checkBank(); public abstract void checkCredit(); ...
阅读全文
1.适配器的作用:将一个接口转换为另一个接口。我们可以比喻为一个插座的转换头。 2.构造适配器的关键:实现了目标接口,并持有被适配者的实例。 而适配器使用的方法是:客户通过目标接口调用适配器的方法对适配器发出请求,适配器使用被适配者接口把请求转换为被支配者的一个或多个调用接口。我们举一个火鸡冒充鸭子的适配器例子: 我们定义两个东西: 一个是鸭子: public interface Duck { public void quack(); publ...
阅读全文
1.这一节我们的任务是创建一个类似智能家居的万能遥控器,控制各种家电。我们需要将“请求”封装成对象(一个命令对象通过在特定接收者上绑定一组动作来封装请求),以便使用不同的请求、队列、或者日志来参数化其对象——这就是命令模式。 2.我们具体来看一个例子: 首先我们要完成对命令的对象封装: public interface Command { public void execute(); } 只有一个方法,所有的具体命令的对象都要实现这个接口,这就做到...
阅读全文