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