1.1概述 用原型實例指定創建對象的種類,並且通過複製這些原型創建新的對象。這就是原型模式的定義。 在某些情況下,可能不希望反覆使用類的構造方法創建許多對象,而是希望使用該類創建一個對象後,以該對象為原型得到該對象的若幹個複製品。也就是說,將一個對象定義為原型對象,要求改原型對象提供一個方法,使該原 ...
1.1概述
用原型實例指定創建對象的種類,並且通過複製這些原型創建新的對象。這就是原型模式的定義。
在某些情況下,可能不希望反覆使用類的構造方法創建許多對象,而是希望使用該類創建一個對象後,以該對象為原型得到該對象的若幹個複製品。也就是說,將一個對象定義為原型對象,要求改原型對象提供一個方法,使該原型對象調用此方法可以複製一個和自己有完全相同狀態的同類型對象,即該方法“克隆”原型對象得到一個新對象。原型對象和以它為原型“克隆”出的新對象可以分別獨立地變化,也就是說,原型對象改變其狀態不會影響到以它為原型“克隆”出的新對象,反之也一樣。
例如,通過複製一個已有的Word文檔中的文本創建一個新的Word文檔後,兩個文檔中的文本內容可獨立地變化互不影響。
原型模式是從一個對象出發得到一個和自己有相同狀態的新對象的成熟模式,該模式的關鍵是將一個對象定義為原型,併為其提供複製自己的方法。
1.2模式的結構
原型模式結構包括兩種角色:
(1)抽象原型(Prototype):一個介面,負責定義對象複製自身的方法。
(2)具體原型(ConcretePrototype):實現Prototype介面的類,具體原型實現抽象原型中的方法,以便所創建的對象調用該方法複製自己。
原型模式結構的類圖如下圖所示:
圖一:原型模式結構的類圖
1.3原型模式的優點
(1)當創建類的新實例的代價更大時,使用原型模式複製一個已有的實例可以提高創建新實例的效率。
(2)可以動態地保持當前對象的動態。在運行時,可以隨時使用對象流保存當前對象的一個複製品。
(3)可以在運行時創建新的對象,而無須創建一系列類和繼承結構。
(4)可以動態地添加、刪除原型的複製品。
1.4適合使用原型模式的情景
(1)程式需要從一個對象出發,得到若幹個和其狀態相同,並可獨立變化其狀態的對象時。
(2)當對象的創建需要獨立於它的構造過程和表示時。
(3)一個類創建實例狀態不是很多,那麼就可以將這個類的一個實例定義為原型,那麼通過複製該原型得到新的實例可能比重新使用類的構造方法創建新實例更方便。