原型模式也是一種建立模式,它主要經過複製一個對象來建立一個新的對象。 原型類須要知足兩個條件:java
Cloneable
接口,只有實現了這個接口的類才能被拷貝,不然會拋出CloneNotSupportedException
異常。Object
類中的clone
方法,由於Object
類中的clone
方法是protect
,所以原型類須要重寫,將clone
方法改成public
。以下:ide
public class ProtoType implements Cloneable {
public void show() {
System.out.println("hahaha");
}
@Override
protected ProtoType clone() {
ProtoType protoType = null;
try {
protoType = (ProtoType)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return protoType;
}
}
複製代碼
客戶端調用spa
public class Main {
public static void main(String[] args) {
ProtoType protoType = new ProtoType();
ProtoType clone = protoType.clone();
clone.show();
}
}
複製代碼
protected native Object clone() throws CloneNotSupportedException;
複製代碼
Object
類中的clone
方法是一個native方法,直接操做內存中的二進制流,因此在構建複雜大對象的時候,會比new一個對象快。code
Object
中的clone
方法是淺拷貝,若是想要實現深拷貝,須要本身實現。 最簡單的深拷貝方式直接序列化,而後反序列化。