设计模式探秘-10-原型模式

原型模式的学习与实践

原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。即:新对象的创建可以通过已有对象进行创建。

类图

Prototype模式提供通过已存在对象进行新对象创建的接口。C++中通过拷贝构造函数实现。

优点

  1. 性能优良,原型模式是在内存中二进制流的拷贝,比直接new一个对象性能好很多,特别是在循环体内产生大量的对象时,原型模式可以更好的体现其优点。
  2. 逃避构造函数的约束,直接在内存中拷贝,构造函数不会执行,优点是减少了约束,缺点也是减少了约束。

缺点

使用场景

  1. 资源优化场景,类初始化需要消耗很多资源,包括数据、硬件资源等。
  2. 性能和安全要求的场景,通过new产生一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式。
  3. 一个对象多个修改者的场景,一个对象需要提供给多个对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。

注意事项

  1. 构造函数不会执行
  2. 浅拷贝和深拷贝

扩展

实践

  1. Builder模式重在复杂对象的一步步创建(并不直接返回对象)
  2. AbstractFaxtory模式重在产生多个相互依赖类的对象
  3. Prototype模式重在从自身复制自身创建新类

参考资料

  1. 设计模式之禅
  2. GoF+23种设计模式解析