部分代码转载自:http://blog.youkuaiyun.com/sadfishsc/article/details/7998161
原型模式,把开销较大的初始化操作换成开销较小的克隆操作。
关于 克隆:复制成员变量咯
关于引用类成员变量的克隆:a对象的User user是个引用,a1克隆自a,那么a的user和b的user都指向同一个User对象,那么也就是说,
b.setUser();对user这个引用修改,那么a里的user也会同时修改
那么上面的就是一个bug,不合逻辑。要修复这个bug,使用深度克隆
clone()方法是objet的一个方法,浅克隆可以直接调用任何对象的clone方法
重写Object类的克隆方法
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
深度克隆的重写:
- public Test clone() {
- Test cloned = null;
- try {
- cloned = (Test)super.clone();
- cloned.c = new Counter();
- cloned.c.set(c.get());
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
- return cloned;
- }