C 設計模式之原型模式

2022-05-17 17:28:36 字數 2899 閱讀 4313

原型模式:使用原型例項指定待建立物件的型別,並且通過複製這個原型來建立新的物件

分析:

孫悟空:根據自己的形狀複製(轉殖)出多個身外身

軟體開發:通過複製乙個原型物件得到多個與原型物件一模一樣的新物件

工作原理:將乙個原型物件傳給要發動建立的物件(即客戶端對象),這個要發動建立的物件通過請求原型物件複製自己來實現建立過程

建立新物件(也稱為轉殖物件)的工廠就是原型類自身,工廠方由負責複製原型物件的轉殖方法來實現

通過轉殖方法所建立的物件是全新的物件,它們在記憶體中擁有新的位址,每乙個轉殖物件都是獨立

通過不同的方式對轉殖物件進行修改以後,可以得到一系列相似但不完全相同的物件

原型模式的結構

原型模式包含以下3個角色:

•prototype(抽象原型類)

•concreteprototype(具體原型類)

•client(客戶類)

淺轉殖與深轉殖

淺轉殖(shallow clone)當原型物件被複製時,只複製它本身和其中包含的值型別的成員變數,而引用型別的成員變量並沒有複製

深轉殖(deep clone)除了物件本身被複製外,物件所包含的所有成員變數也將被複製

案例:

[serializable]  //

深轉殖時需要將類標記為serializable

public

class

person:icloneable

public member member

public

person()

public

object

clone()

#region 靜態方式建立物件

private

static

person _person;

//////

靜態建構函式,永遠只執行一次

/// static

person()

public

static

person staticclone()

#endregion

}

[serializable]

public

class

member

public

string name

}

public

class

serializehelper

}//////

反序列化

/// ///

//////

public

static t derializable(string

target)

}//////

合併反序列化與序列化

/// ///

//////

public

static t deepclone(t t)

}

呼叫:

//

淺表轉殖,原來建立的物件值會改變

person p = new

person();

person p1 = p.clone() as

person;

p1.currentemployee = "

user";

p1.member.id = 1

;p1.member.name = "

pp1";//

深度轉殖,原來建立的物件值不會改變

person p2 = p.clone() as

person;

person p3 = serializehelper.derializable(serializehelper.serializable(p2));

//或者簡寫

//person p3 = serializehelper.deepclone(p2);

p3.member.id = 6

;p3.member.name = "

dd3"

;console.read();

c 設計模式之原型模式

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

C 設計模式 之 原型模式

別名 轉殖模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。在程式設計中,經常面臨著 某些結構複雜的物件 的建立工作 由於需求的變化,這些物件經常面臨著劇烈的變化,但是它們卻擁有比較穩定一致的介面。問題來了 如何建立易變類的實體物件?解決方案 採用 原型轉殖 ...

設計模式之原型模式

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