用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
建立型模式中乙個比較特殊的模式-原型模式,有個最大的特點是轉殖乙個現有的物件,這個轉殖的結果有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成員函式不斷拷貝出新...