Prototype中的shallow clone 与deep clone 与new 一个实例的区别

      MemberwiseClone()方法是Object类的一个受保护方法,实现了对象的浅拷贝。如果希望实现一个深拷贝,应该实现ICloneable接口,并自己编写ICloneable的Clone接口方法。
     那么它们两者与new有何区别呢?
    从构造函数说起:构造函数相当于对类实例的一个初始化操作,如果构造函数的执行时间很长,例如获取一些远程配置信息之类。如果每NEW一次,都需要执行一次构造函数,那么无疑效率是很低的。如果配置信息不发生变化的化,克隆是最好的办法。
    深拷贝和重新生成一个实例的性能差不多。但从以下几个角度出发,深拷贝要具有优势:
1、当new一个对象时,构造函数将被调用。如果构造函数的运行时间比较长(例如获取当前机器的配置信息),那么不如克隆一份更方便,更高效。
2、另外程序在复杂环境中运行时,一个对象的当前状态恐怕很难了解的清清楚楚(也不需要了解清楚)。在这种情况下很难使用new制作个一模一样的对象出来,而使用深拷贝很好的符合了最小知识原则-知道的越少越好。比如一个类的封装了很多数据(通过属性的set()),那么这个时候的复制和new的效果显然是不一样的。
3、学习了Builder模式后知道,有很多对象创建过程如此复杂,需要在一个Director指导下进行构建,克隆就方便的多了。
    其实:原型实际上是动态抽取当前对象运行时的状态 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值