C 設計模式 原型模式

2021-07-11 10:20:39 字數 2389 閱讀 8287

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

建立型模式中乙個比較特殊的模式-原型模式,有個最大的特點是轉殖乙個現有的物件,這個轉殖的結果有2種,一種是淺度複製,另一種是深度複製。

建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速的建立乙個物件而不需要提供專門的new()操作就可以快速完成物件的建立,這無疑是一種非常有效的方式,快速的建立乙個新的物件。

一.淺度複製:

先看原型模式的經典實現:定義乙個介面, 用來表述所有的顏色物件介面

/// /// 顏色介面

///

public inte***ce icolor

int green

int blue

}

給出紅色的具體實現**:

public class redcolor:icolor

public int green

public int blue

public icolor clone()

}

具體的測試**如下:

static void main(string args)

執行結果如下:

可以發現:在我們修改color1物件的red屬性值,沒有對color的屬性參生影響。

即物件副本的修改不會影響物件本身的狀態,

二.深度複製:

深複製考慮的情況相對來說就會比較複雜,因為有可能物件是之間有繼承關係或者引用關係的時候,可能我們深複製的時候就需要注意.

一般來說深複製一方面可以採用種簡單的深複製物件的時候的方案,還可以通過序列化的形式來進行物件的複製。

下面通過序列化的形式來實現原型模式:

using system;

using system.collections.generic;

using system.linq;

using system.text;

int green

int blue

factroy f

}/// /// 生產顏色的工廠資訊

///

[serializable]

public class factroy}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

public int green

public int blue

public factroy f

public icolor clone()}}

/// /// 序列化和反序列化輔助類

///

public class serializablehelper

}public object derializable(string target)

}public t derializable(string target)

}

static void main(string args)

;console.writeline("color - factroy:" + color.f.name); //湖北工廠

icolor color1 = color.clone();

color1.red = 234;

color1.f.name = "北京工廠";

console.writeline("color1- factroy:" + color1.f.name); //北京工廠

console.writeline("color - factroy:" + color.f.name); //湖北工廠

console.read();

}

程式的執行結果如下:

結論:通過序列化和反序列化形成新的物件。其實只要是專案中要使用原型模式進行物件複製的情況下,都可以通過序列化的形式來進行深複製。

關於深度複製和淺度複製的區別可以參考

C 設計模式 原型模式

定義 用原型 prototype 例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。結構 理解 1.prototype 是原型基類,提供clone 純虛方法,它根據不同的派生類來轉殖不同的物件。2.concreteprototype 是原型具體類。實現clone 方法,轉殖自己,返回轉殖後的...

c 設計模式(原型模式)

good 從乙個物件再建立另外乙個可定製的物件,而無需知道任何建立的細節。並能提高建立的效能。說白了就copy技術,把乙個物件完整的copy出乙份。例 include include include using namespace std class prototype 抽象基類 prototype...

C 設計模式 原型模式

所謂原型模式就是用原型例項指定建立物件的種類,並且通過複製這些原型建立新的物件。舉乙個簡單的例子,乙個人想要批量分發自己的名片,然而名片千篇一律,只是偶爾修改一些地方,但需求量大,所以需要不斷例項化名片類,十分麻煩,所以這就有了原型模式。原型模式旨在以某一類為原型,利用clone成員函式不斷拷貝出新...