码迷,mamicode.com
首页 > 其他好文 > 详细

原型模式

时间:2016-06-08 15:57:53      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

解释:

  用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新对象。

  其实就是从一个对象再创建另外一个可定制的对象,且不需知道任何创建的细节。

  技术分享

优点:

  防止多次实例化同样的东西,并设置同样的属性。类似克隆。

  对性能提高较大。一般在初始化信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。

  等于不用重新初始化对象,而是动态地获得对象运行时的状态。

注意:

  MemberwiseClone()是浅表复制,对于值类型没什么问题。但是对于引用类型,还是指向了原来的对象。所以修改后会影响克隆之前引用对象的值。  

代码示例:

  技术分享

升级版本:

  对于.NET而言,原型抽象类prototype用不着,因为克隆太常用了。所以,.NET在System命名空间中提供了ICloneable接口,其中有方法Clone()。这样,目标类只需要实现这个接口就可以完成原型模式了。

代码示例:

  技术分享

   技术分享

浅复制:

  被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。(引用对象克隆的与原始的都指向同一个引用)

  技术分享

  简历类的Clone():

  技术分享

  客户端代码:

   技术分享

  结果:

  技术分享

深复制:

  把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。(引用对象克隆的与原始的指向不同的引用)

  数据集对象DataSet,Clone()方法用来复制DataSet的结构,但不复制DataSet的数据,实现了原型模式的浅复制。Copy()方法不但复制结构,也复制数据,实现了原型模式的深复制。

  技术分享

     简历类的Clone():

  技术分享

     简历类的初始化:

  技术分享

  工作经历的Clone():

  技术分享

  结果:

  技术分享

  深复制要深入到多少层,需要事先考虑好,而且要当心出现循环引用的问题,需要小心处理。此例只深入到第一层。

原型模式

标签:

原文地址:http://www.cnblogs.com/panpanwelcome/p/5569529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!