原型模式
原型模式主要介绍了java中cloneable接口的应用。在Java中,对象的直接等于”=”重载了C/C++中的引用,改变一个类会引起另一类的变化,即浅拷贝。而实现了cloneable接口的类,可以通过clone方法来克隆一个新的类,两个类互不影响,即深拷贝。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class SimpleObject implements Cloneable { private String str; public SimpleObject() { System.out.println("Enter SimpleObject.constructor()"); }
public String getStr() { return str; }
public void setStr(String str) { this.str = str; } public Object clone() throws CloneNotSupportedException { return super.clone(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static void main(String[] args) throws Exception { SimpleObject so0 = new SimpleObject(); so0.setStr("111"); SimpleObject so1 = (SimpleObject)so0.clone(); System.out.println("so0 == so1?" + (so0 == so1)); System.out.println("so0.getClass() == so1.getClass()?" + (so0.getClass() == so1.getClass())); System.out.println("so0.equals(so1)?" + (so0.equals(so1))); so1.setStr("222"); System.out.println("so0.getStr():" + so0.getStr()); System.out.println("so1.getStr():" + so1.getStr()); }
Enter SimpleObject.constructor() so0 == so1?false so0.getClass() == so1.getClass()?true so0.equals(so1)?false so0.getStr():111 so1.getStr():222
|
Tip:克隆一个对象并不会调用对象的构造方法。