C 設計模式 之 原型模式

2021-10-22 12:02:37 字數 1777 閱讀 2918

別名:轉殖模式、prototype

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

在程式設計中,經常面臨著「某些結構複雜的物件」的建立工作;由於需求的變化,這些物件經常面臨著劇烈的變化,但是它們卻擁有比較穩定一致的介面。

問題來了:

如何建立易變類的實體物件?

解決方案:

採用「原型轉殖」的方法來做,它是的我們可以非常靈活地動態建立「擁有某些穩定介面」的新物件 – 所需工作僅僅是註冊乙個新類的物件(原型),然後在任何需要的地方不斷的clone

要點:

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

原型 (prototype) 介面將對轉殖方法進行宣告。 通常情況下, 其中只會有乙個名為 clone轉殖的方法。

具體原型 (concrete prototype) 類將實現轉殖方法。 除了將原始物件的資料複製到轉殖體中之外, 該方法有時還需處理轉殖過程中的極端情況, 例如轉殖關聯物件和梳理遞迴依賴等等。

客戶端 (client) 可以複製實現了原型介面的任何物件。

優點:

缺點:

適用性:

實現方式:

建立乙個原型管理器:原型管理器是乙個關聯儲存器,它返回乙個與給定關鍵字匹配的原型。

實現轉殖操作:原型設計模式最困難的部分在於正確實現clone操作。c#語言為我們提供this.memberwiseclone();來實現淺拷貝。而深拷貝我們可以通過序列化去實現。

初始化轉殖物件:在不同的情況下,客戶程式使用需要不同的初始值,所以一些原型可能要多個初始化引數。

拓展:什麼是「淺拷貝和深拷貝」?

可以簡單理解為,淺拷貝是lista = new list(); listb = a;, 集合a,b同指向乙個記憶體修改a中的值即修改了b中的值;而深拷貝是lista = new list(); listb = new list(a);new了乙個集合b並且將a中的資料全部複製過去了,此時a,b沒有任何關係。

示例**:

class

program

static

void

displayvalues

(person p)

, 年齡: , id: "

, p.name, p.age

}}///

/// 原型別 -- 需要被拷貝的類

///

public

class

person

///

/// 深拷貝

///

///

public

person

deepcopy()

}// 作為引用型別的資料

public

class

idinfo

}

測試結果:

c 設計模式之原型模式

原型模式prototype pattern 定義 原型模式一種物件建立型模式,她採用複製物件原型的方法來建立物件的例項。使用原型模式建立的例項,具有與原型一樣的資料。注意 1 由原型物件自身建立目標物件。也就是說,物件建立這一動作發自原型物件本身。2 目標物件是原型物件的乙個轉殖。也就說,通過原型模...

C 設計模式之原型模式

原型模式 使用原型例項指定待建立物件的型別,並且通過複製這個原型來建立新的物件。分析 孫悟空 根據自己的形狀複製 轉殖 出多個身外身 軟體開發 通過複製乙個原型物件得到多個與原型物件一模一樣的新物件 工作原理 將乙個原型物件傳給要發動建立的物件 即客戶端對象 這個要發動建立的物件通過請求原型物件複製...

設計模式之原型模式

原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...