标签(空格分隔): 原型模式 浅克隆 深克隆
原型模式: 从一个对象再创建另外一个可定制的对象,且不需要知道任何创建的细节。即能实现对象克隆。
java中提供了对象克隆的原生支持:
在java中,有一个Cloneable接口,它的作用是声明克隆的能力, 一个类只有实现它才可以被拷贝,然后重写clone(),否则在运行时会抛出CloneNotSupportedException异常
优点: 简化对象的创建过程,隐藏了对象创建的细节,又对性能大大的提高
深克隆&浅克隆
⑴浅克隆
被克隆对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅克隆仅仅克隆当前被克隆的对象,而与它所引用的对象没有关系。
⑵深克隆
被克隆对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被克隆过的新对象,而不再是原有的那些被引用的对象。换言之,深克隆把要克隆的对象所引用的对象都克隆了一遍。
实现方法
1、在java中,Object中的clone()方法是一个native方法,Cloneable接口仅是一个标记性接口,用来通知jvm这个对象可以调用clone方法,而且Object的clone()方法仅仅实现是浅克隆,若要实现深克隆则需要重写Object.clone()。
2、 Apache Commons 提供了相关的克隆组件和方法
- 深克隆/拷贝(deep clone/copy): SerializationUtils
SerializationUtils.clone(object);//返回深复制后的结果
- 浅克隆/拷贝(shallow clone/copy):BeanUtils
BeanUtils.cloneObject(object);//返回浅复制的结果
网友评论