设计模式读书笔记(二)--创建型模式

1、创建型模式抽象了实例化过程。他们帮助一个系统独立于如何创建、组合和表示它的那些对象、一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
2、回顾一下创建型模式主要包括以下几种:
 (1)Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
 (2)Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
 (3)Prototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
 (4)Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3、Abstract Factory(抽象工厂)--对象创建型模式
 (1)意图:提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类。
 (2)适用性:
  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而想显示它们的接口而不是实现时。

 (3)结构图:

(4)参与者:

  • AbstractFactory:声明一个创建抽象产品对象的操作接口。
  • ConcreteFactory:实现具体产品对象的操作。
  • AbstractProduct:为一类产品对象声明一个接口。
  • ConcreteProduct:定义一个将被相应的具体工厂创建的产品对象;实现AbstractProduct接口。
  • Client:仅使用由AbstractFactory和AbstractProduct类声明的接口。

(5)优缺点:

  • 分离了具体的类:AbstractFactory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。
  • 它使得易于交换产品系列:一个具体工厂类在一个应用中仅出现一次--即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。
  • 它有利于产品的一致性:当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而AbstractFactory很容易实现这一点。
  • 难以支持新种类的产品:难以扩展抽象工厂以生产新种类的产品。这是因为AbstractFactory接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将涉及AbstractFactory类及其所有子类的改变。

(6)实现抽象工厂模式的一些有用的技术:

  • 将工厂作为单件:一个应用中一般每个产品系列只需一个ConcreteFactory的实例。因此工厂最好实现为一个Singleton。
  • 创建产品:AbstractFactory仅声明一个创建产品的接口,真正创建产品是由ConcreteFactory子类实现的。最通常的一个办法是为每一个产品定义一个工厂方法。一个具体的工厂将为每个产品重定义该工厂方法以指定产品。虽然这样的实现很简单,但它却要求每个产品系列都要有一个新的具体工厂子类,即使这些产品系列的差别很小。
  • AbstractFactory通常用工厂方法实现,但它们也可以用Prototype模式实现。
  • 一个具体的工厂通常是一个单件。

猜你喜欢

转载自www.cnblogs.com/cfYu/p/9657972.html