**片斷 1:prototype.h
#ifndef _prototype_h_
#define _prototype_h_
class prototype;
class concreteprototype:public prototype;
#endif //~_prototype_h_
**片斷 2:prototype.cpp
#include "prototype.h"
#include
tzhaqusing namespace std;
prototype::prototype()
prototype::~prototype()
prototype* prototype::clone() const
concreteprototype::concreteprototype()
concreteprototype::~concreteprototype()tzhaq
concreteprototype::concreteprototype(cowww.cppcns.comnst concreteprototype& cp)
**說明:原型模式的結構和實現都很簡單,其關鍵就是(c++中)拷貝建構函式的實現方式,這也是 c++實現技術層面上的事情。由於在示例**中不涉及到深層拷貝(主要指有指標、復合物件的情況),因此我們通過編譯器提供的預設的拷貝建構函式(按位拷貝)的方式進行實現。說明的是這一切只是為了實現簡單起見,也因為本文件的重點不在拷貝建構函式的實現技術,而在原型模式本身的思想。
另乙個例項
我們再來看乙個具體專案的例子:
namespace prototype_designpattern
// this is a sample object
class myprototype : abstractprototype
// lots of other functions go here!
} // this is the client piece of code which instantiate objects
// based on a prototype.
class demo
public void someimportantoperation()
}///
/// summary description for client.
///
public class client }
}c#對原型模式的支援
在c#裡面,我們可以很容易的通過clone()方法實現原型模式。任何類,只要想支援轉殖,必須實現c#中的icloneable介面。icloneable介面中有一clone方法,可以在類中複寫實現自定義的轉殖方法。轉殖的實現方法有兩種:淺拷貝(shallow copy)與深拷貝(deep coptzhaqy)。
淺拷貝與深拷貝
下面給出淺拷貝與深拷貝的兩個例子,例子使用了icloneable介面。c#中的陣列是引用型的變數,我們通過陣列來進行演示:
淺拷貝:
using system;
class shallowcopy : icloneable
; public object clone()
public void display() }
class client
}shallowcopy物件實現了乙個淺拷貝,因此當對sc1進行轉殖時,其欄位v並沒有轉殖,這導致sc1與sc2的字段v都指向了同乙個v,因此,當修改了sc1的v[0]後,sc2的v[0]也發生了變化。
深拷貝:
using system;
class deepcopy : icloneable
; // 預設建構函式
public deepcopy()
// 供clone方法呼叫的私有建構函式
private deepcopy(int v)
publtzhaqic object clone()
public void display() }
class client
}關於原型模式的討論
原型模式通過複製原型(原型)而獲得新物件建立的功能,這裡原型本身就是"物件工廠"(因為能夠生產物件),實際上原型模式和 builder 模式、abstractfactory 模式都是通過乙個類(物件例項)來專門負責物件的建立工作(工廠物件),它們之間的區別是: builder 模式重在複雜物件的一步步建立(並不直接返回物件),abstractfactory 模式重在產生多個相互依賴類的物件,而原型模式重在從自身複製自己建立新類。
本文標題: 例項講解c++程式設計中對設計模式中的原型模式的使用
本文位址:
例項解析C 設計模式程式設計中簡單工廠模式的採用
簡單工廠模式中專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。它又稱為靜態工廠方法模式,屬於類的建立型模式。簡單工廠模式的uml類圖 簡單工廠模式的程式通過封裝繼承來降低程式的耦合度,設計模式使得程式更加的靈活,易修該,易於復用。簡單工廠是在工廠類中做判斷,從而創造相應的產品...
PHP中「簡單工廠模式」例項講解
簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 採用封裝方式23 4class calc 30 result num1 num2 31 break 32 33return r...
PHP中「簡單工廠模式」例項講解
簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 採用封裝方式23 4class calc 30 result num1 num2 31 break 32 33return r...