原型模式

原型模式与拷贝息息相关:

   先给个拷贝讲解的:

    http://rongqingsong.11.blog.163.com/blog/static/46420686201162594154725/

    深拷贝与浅拷贝总结

   浅拷贝只是简单的对象地址复制,所指向的空间并没有复制,而是由两个对象共用

    深拷贝会涉及到内存的分配

    对于有动态内存分配的,如果没有进行深拷贝会出现未定义的行为。
 
原型模式:
  参考:
    C++原型模式_微学苑(编程第一站)     http://www.weixueyuan.net/view/1266.html
    C++设计模式——原型模式 | 果冻想    http://www.jellythink.com/archives/105
总结:
   1、什么时候用原型模型?

       a、当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些;(像C++关键字:auto)

       b、有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;例如:一个对象,经过一段处理之后,其内部的状态发生了变化;这个时候,我们需要一个这个状态的副本,如果直接new一个新的对象的话,但是它的状态是不对的,此时,可以使用原型模式,将原来的对象拷贝一个出来,这个对象就和之前的对象是完全一致的了;

       c、当我们处理一些比较简单的对象时,并且对象之间的区别很小,可能就几个属性不同而已,那么就可以使用原型模式来完成,省去了创建对象时的麻烦了;

       d、有的时候,创建对象时,构造函数的参数很多,而自己又不完全的知道每个参数的意义,就可以使用原型模式来创建一个新的对象,不必去理会创建的过程。

 

  2、与其他创建型模式的区别

      原型模式通过复制原型(原型)而获得新对象创建的功能,这里原型本身就是"对象工厂"(因为能够生产对象),实际上原型模式和 Builder 模式、AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是: Builder 模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory 模式重在产生多个相互依赖类的对象,而原型模式重在从自身复制自己创建新类。

 

   3、原型模式的缺点

    原型模式的最大缺点是继承原型的子类都要实现Clone操作。但有些原型当内部包括一些不支持拷贝或者有循环引用的对象时,实现克隆可能会很困难。

 

posted on 2016-04-05 11:59  RenewDo  阅读(97)  评论(0编辑  收藏  举报

导航