Archive for 18 10 月, 2010

设计模式学习——Singleton(单件)

星期一, 18 10 月, 2010

意图:希望对象只有一个实例,但没有控制对象实现代的全局对象。还希望确保所有实体使用该对象相同的实例,而无需将引用传给它们。

问题:几个不同的客户对象需要引用同一个对象,而且希望确保这种类型的对象数目不超过一个。

解决方案:保证一个实例。

参与者与协作者:Client对象只能通过getInstance方法创建Singleton实例。

效果:Client对象无需操心是否存在Singleton实例。这是由Singleton自己控制的。

实现:
1. 添加一个类的私有的静态成员变量,引用所需的对象(初值为null)。
2. 添加一个公共静态方法,它在成员变量为null时实例化这个类(并设置成员变量的值),然后返回该成员变量的值。
3. 将构造函数的状态设置为保护或私有,从而防止任何人直接实例化这个类,绕过静态构造函数机制。

(更多…)

设计模式学习——Template Method(模板方法)

星期一, 18 10 月, 2010

意图:定义一个操作中算法的骨架,将一些步骤推迟到子类实现。可以不改变算法的结构而重定义该算法的步骤。

问题:要完成要某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同。

解决方案:允许定义可变的子步骤,同时保持基本过程一致。

参与者与协作者:Template Method模式由一个抽象类组成,这个抽象类定义了需要覆盖的基本TemplateMethod方法。每个从这个抽象类派生的具体类将为此模板实现新方法。

效果:模板提供了一个很好的代码复用平台。它还有助于确保所需步骤的实现。它将每个Concrete类的覆盖步骤绑定起来,因此只有在这些变化总是并且只能一起发生时,才应该使用Template Method模式。

实现:创建一个抽象类,用抽象方法实现一个过程。这些抽象方法必须在子类中实现,以执行过程的每个步骤。如果这些步骤是独立变化的,那么每个步骤都可以用Strategy模式来实现。

(更多…)