2009-05-19读书记录:《大话设计模式》第九章——原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

this.MemberwiseClone()
创建当前对象的浅表副本,即创建一个新的对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对应该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。因此原始对象及其副本引用同一对象。

p1.Clone()——克隆类ConcretePrototype1 的对象p1,就能得到实例c1。这样就可以不用实例化ConcretePrototype1了,直接克隆就行了。
PS:.NET在System命名空间中提供了ICloneable接口,其中就是唯一的一个方法Clone(),只需要继承这个接口就完成原型模式了。
每次New一个新对象时都要执行一次构造函数,如果构造函数执行的时间很长,那么多次的执行这个初始化的操作效率很低,就可以考虑使用原型模式。一般在初始化的信息不发生变化的情况下,克隆是最好的方法。即隐藏了对象创建的细节,又对性能大大提高。它等于是不用重新初始化对象,而是动态的获得对象运行时的状态。

浅复制与深复制
书中给的一段例子程序中,由于工作经历为一个类类型,所以在克隆的时候引用类型被指向同一个引用,所以86的程序打印出来工作经历是完全一样的。
个人感觉这个最开始就使用这个事件来说明此模式不是很好,比如上面出现的这个问题,如下语句就可以解决:

只要分开打印就行了,最后打印的时候由于所引用的对象发生了改变,当然全部都变了。编个故事也不容易还是继续吧!
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对象对其他对象的引用仍然指向原来那个对象
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。即新生成一个对象,再引用。

本书都是.NET环境下讲解的,语言也是使用C#,像本章中.NET Framework就提供了接口使用起来很方便,但其它平台是怎样的呢?比如Java!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值