原型模式(Prototype Pattern)

2022-03-16 07:57:20 字數 1378 閱讀 4681

意圖

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

這個結構說明原型模式的客戶端程式(client

)是依賴於介面(

icolorprototype

),而物件的具體實現也是依賴於介面(

icolorprototype

)。符合設計模式原則中的依賴倒置原則——抽象不應依賴於具體實現,具體實現應依賴於抽象。

實現要點

1.使用原型管理器,體現在乙個系統中原型數目不固定時,可以動態的建立和銷毀,如上面的舉的調色盤的例子。

2.實現轉殖操作,在.net中可以使用object類的memberwiseclone()方法來實現物件的淺表拷貝或通過序列化的方式來實現深拷貝。

3.prototype模式同樣用於隔離類物件的使用者和具體型別(易變類)之間的耦合關係,它同樣要求這些「易變類」擁有穩定的介面。

效果

1.它對客戶隱藏了具體的產品類,因此減少了客戶知道的名字的數目。

2.prototype模式允許客戶只通過註冊原型例項就可以將乙個具體產品類併入到系統中,客戶可以在執行時刻建立和刪除原型。

3.減少了子類構造,prototype模式是轉殖乙個原型而不是請求工廠方法建立乙個,所以它不需要乙個與具體產品類平行的creater類層次。

4.portotype模式具有給乙個應用軟體動態載入新功能的能力。由於prototype的獨立性較高,可以很容易動態載入新功能而不影響老系統。

5.產品類不需要非得有任何事先確定的等級結構,因為prototype模式適用於任何的等級結構

6.prototype模式的最主要缺點就是每乙個類必須配備乙個轉殖方法。而且這個轉殖方法需要對類的功能進行通盤考慮,這對全新的類來說不是很難,但對已有的類進行改造時,不一定是件容易的事。

適用性

在下列情況下,應當使用prototype模式:

1.當乙個系統應該獨立於它的產品建立,構成和表示時;

2.當要例項化的類是在執行時刻指定時,例如,通過動態裝載;

3.為了避免建立乙個與產品類層次平行的工廠類層次時;

4.當乙個類的例項只能有幾個不同狀態組合中的一種時。建立相應數目的原型並轉殖它們可能比每次用合適的狀態手工例項化該類更方便一些。

總結

prototype模式同工廠模式,同樣對客戶隱藏了物件的建立工作,但是,與通過對乙個類進行例項化來構造新物件不同的是,原型模式是通過拷貝乙個現有物件生成新物件的,達到了「隔離類物件的使用者和具體型別(易變類)之間的耦合關係」的目的。

**

建立型模式 原型模式

使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...

建立型模式 原型模式

原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...

原型模式 建立型模式

文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...