跳转至

原型模式

意图

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。

  • 当直接创建对象的代价比较大时,则采用这种模式。

适用性

  • 系统应独立于产品的创建、构成和表示。
  • 需要在运行时指定实例化的类,例如通过动态加载。
  • 避免创建与产品类层次平行的工厂类层次。
  • 类的实例只能有几种不同状态组合,克隆原型比手工实例化更方便。

应用实例

  • 细胞分裂
  • Java 中的 Object.clone() 方法

类图

  • 抽象原型类:规定了具体原型对象必须实现的接口。
  • 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
  • 访问类:使用具体原型类中的 clone() 方法来复制新的对象。

prototype

优缺点

优点

  • 性能提高,避免构造函数的约束

缺点

  • 配备克隆方法需要全面考虑类的功能,对已有类可能较难实现,特别是处理不支持串行化的间接对象或含有循环结构的引用时。
  • 注意浅拷贝和深拷贝。