编程艺术之原型模式

    一、原型模式分析

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

             

    在原型模式中Clone方法是一个很重要的方法,Clone方法也是抽象类的关键。在原型模式的结构图中可以看出,Prototype是原型类,声明一个克隆自身的接口。ConcretePrototype1和ConcretePrototype2是克隆类,经过它们的克隆可以得到新的实例,而它们就是克隆自身的操作。但是在简历的原型实现里,定义了一个ICloneable接口,Clone方法实现这个接口完成原型模式。而实现接口的方法,可以用来克隆对象。在客户端里只需要调用Clone方法就可以实现新简历的生成,并且可以在修改新简历的细节。Clone方法可以使得相同的部分不用再重复。不需要每new一次,就要执行一次构造函数,这样可以提高效率。所以一般在初始化的信息不发生变化的情况下,克隆方法是最好的方法,这既隐藏了对象创建的细节,又使得性能得到很大的提高。这也就使得原型模式不用重新初始化对象,而是动态地获得对象运行时的状态。

    二、浅复制与深复制

    浅复制就是被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。就像书上的例子一样,用的是MenberwiseClone()方法,字段是引用类型的,复制引用但不复制引用的对象,所以原始对象及其复本引用同一对象。导致运行结果没有达到预期要求,三次显示结果都是最后一次设置的值。当简历用深复制实现的时候,程序的运行结果就达到了预期结果。

    所谓的深复制就是,把引用对象的变量执行复制过的新对象,而不是原有的被引用的对象。引用的对象性都是不同的,复制时就一变二,二变三……复制下去。简历中就是在定义Clone方法的时候调用私有的构造方法,让“工作经历”克隆完成,然后再给这个“简历”对象的相关字段赋值,最终返回一个深复制的简历对象。这样就实现了深复制。

    三、总结

    原型模式涉及到的就是复制,而它所要到达的目的就是用最好最合适的方法进行操作来实现结果。从而引申出浅复制和深复制,浅复制和深复制的使用要分一定的场合,如果只要复制引用但不复制引用的对象,应该选择浅复制;当程序要求把引用对象的变量指向复制过的新对象而不是原有的被引用的对象时,应该选择深复制。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值