在原型模式下,我們在原型別下實現clone方法,通過呼叫本地辦法,實現原型別的複製。也就是說,新物件的建立,不在通過new的形式了,而是在底層通過位元組流的複製建立。當然,這其中有以下幾點需要特別注意:1 原型模式建立物件是不會呼叫構造方法的,這就跟單例模式有了衝突。2 原型模式建立物件的時候,涉及到淺拷貝和深拷貝的問題。對於基本型別,都是採用的淺拷貝,而對於引用型別,則需要採用深拷貝,這樣才能保證引用型別資料的私有化。
**塊
public
class
test
public
void
say()
@override
public man clone()catch(clonenotsupportedexception e)
return man;
} }
//測試
public
static
void
main(string args)
}}
**解讀
以上就是完整的原型模式例項**。我們建立乙個man型別,讓其實現cloneable介面。然後,我們重寫父類的clone方法,實現物件的複製。
原型模式是乙個比較簡單的模式,需要重申的還是原型模式複製物件的時候呀,不會執行建構函式,正如上述**例項中,執行**的時候,建構函式只會執行一次。另外就是關於引用型別的拷貝問題,如果原型類中有引用型別的成員變數,那麼我們就需要對這些成員變數實行深拷貝,呼叫其本身的clone方法,顯示的進行複製。
優點使用原型模型建立乙個物件比直接new乙個物件更有效率,因為它直接操作記憶體中的二進位製流,特別是複製大物件時,效能的差別非常明顯。
隱藏了製造新例項的複雜性,使得建立物件就像我們在編輯文件時的複製貼上一樣簡單。 缺點
由於使用原型模式複製物件時不會呼叫類的構造方法,所以原型模式無法和單例模式組合使用,因為原型類需要將clone方法的作用域修改為public型別,那麼單例模式的條件就無法滿足了。
使用原型模式時不能有final物件。
object類的clone方法只會拷貝物件中的基本資料型別,對於陣列,引用物件等只能另行拷貝。這裡涉及到深拷貝和淺拷貝的概念。
試用場景
使用原型模式建立物件比直接new乙個物件在效能上要好的多,因為object類的clone方法是乙個本地方法,它直接操作記憶體中的二進位製流,特別是複製大物件時,效能的差別非常明顯。
使用原型模式的另乙個好處是簡化物件的建立,使得建立物件就像我們在編輯文件時的複製貼上一樣簡單。
因為以上優點,所以在需要重複地建立相似物件時可以考慮使用原型模式。比如需要在乙個迴圈體內置立物件,假如物件建立過程比較複雜或者迴圈次數很多的話,使用原型模式不但可以簡化建立過程,而且可以使系統的整體效能提高很多。
小唐說設計模式 原型模式
原型模式 prototype pattern 是五種建立型模式的其中一種,用原型例項指定建立物件的種類作為原型,並且通過拷貝原型來建立新的物件。新建乙個物件有時候會很麻煩,可能涉及大量的變數初始化,函式 塊的執行,不僅浪費資源,還會涉及資料準備 訪問許可權等操作。原型模式至少涉及兩個角色 publi...
建立型模式 原型模式
使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...
建立型模式 原型模式
原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...