原型模式与拷贝息息相关:
先给个拷贝讲解的:
http://rongqingsong.11.blog.163.com/blog/static/46420686201162594154725/
深拷贝与浅拷贝总结:
浅拷贝只是简单的对象地址复制,所指向的空间并没有复制,而是由两个对象共用
深拷贝会涉及到内存的分配
a、当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些;(像C++关键字:auto)
b、有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;例如:一个对象,经过一段处理之后,其内部的状态发生了变化;这个时候,我们需要一个这个状态的副本,如果直接new一个新的对象的话,但是它的状态是不对的,此时,可以使用原型模式,将原来的对象拷贝一个出来,这个对象就和之前的对象是完全一致的了;
c、当我们处理一些比较简单的对象时,并且对象之间的区别很小,可能就几个属性不同而已,那么就可以使用原型模式来完成,省去了创建对象时的麻烦了;
d、有的时候,创建对象时,构造函数的参数很多,而自己又不完全的知道每个参数的意义,就可以使用原型模式来创建一个新的对象,不必去理会创建的过程。
2、与其他创建型模式的区别
原型模式通过复制原型(原型)而获得新对象创建的功能,这里原型本身就是"对象工厂"(因为能够生产对象),实际上原型模式和 Builder 模式、AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是: Builder 模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory 模式重在产生多个相互依赖类的对象,而原型模式重在从自身复制自己创建新类。
3、原型模式的缺点
原型模式的最大缺点是继承原型的子类都要实现Clone操作。但有些原型当内部包括一些不支持拷贝或者有循环引用的对象时,实现克隆可能会很困难。