用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象java
Java自帶一個
Cloneable
接口,原型類實現該接口並重寫clone
方法,經過調用該方法建立新的對象。這種不經過new
關鍵字來產生一個對象,而是經過對象複製來實現的模式叫作原型模式。數組
原型類安全
public class PrototypeClass implements Cloneable { @Override protected Object clone() { PrototypeClass prototypeClass = null; try { prototypeClass = (PrototypeClass) super.clone(); } catch (CloneNotSupportedException cloneNotSupportedException) { // TODO 異常處理 } return prototypeClass; } }
new
關鍵字建立對象性能好不少。實際項目中,原型模式不多單獨出現。通常和工廠方法模式結合使用,經過clone方法建立對象,並由工廠方法提供給調用者。ide
即逃避構造函數的約束。函數
若原型類中存在屬性爲引用對象類型時,Java作了一個偷懶的拷貝動做,Object類提供的方法只是clone本對象,對其內部的數組,引用對象等都不拷貝,仍是指向原生對象的地址,即引用賦值而不是對象賦值,而基本類型都會被拷貝,這種拷貝就叫作淺拷貝。對於String
類型,沒有clone方法,經過字符串池在內存中建立新字符串,所以使用時String同基本類型效果一致。性能
想實現對象的深刻拷貝須要在原型類的clone
方法中對引用類型的對象屬性再次調用clone
方法。優化
對象的clone
與final
關鍵字是有衝突的,要使用clone方法,原型類的成員變量上不要增長final
關鍵字。prototype