C 設計模式 原型模式

2021-05-22 12:57:03 字數 2076 閱讀 6018

定義

用原型(prototype

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

結構

理解

1.prototype

是原型基類,提供clone

純虛方法,它根據不同的派生類來轉殖不同的物件。

2.concreteprototype

是原型具體類。實現clone

方法,轉殖自己,返回轉殖後的新物件。

3.client

呼叫基類clone

介面,就可以得到乙個轉殖物件。

要點

1.原型模式中,client

並不知道要轉殖物件的實際型別,只需知道基類型別即可。 2.

轉殖物件比直接建立物件的優點在於,轉殖是將原有物件的行為屬性帶到了新的物件中。

3.c++

沒有轉殖方法,要轉殖乙個物件,需要借助拷貝建構函式(copy constructor

)來實現。拷貝建構函式中實現拷貝物件有淺拷貝和深拷貝:

淺拷貝是指物件複製時,只是對於物件中的資料成員進行值拷貝;深拷貝是指物件賦值時,對於物件的簡單資料成員進行值拷貝,對於物件中的動態成員(堆或者其他系統資源),要重新分配動態空間。

當類不定義拷貝建構函式的時候,編譯器會自動生乙個建構函式,叫做預設拷貝建構函式。預設拷貝建構函式使用淺拷貝方式。如果類中含有動態資料成員,就必須使用深拷貝方式實現拷貝建構函式,否則,在銷毀物件時,兩個物件的析構函式將對同乙個記憶體空間釋放兩次,產生執行時錯誤。

應用

原始碼中,line

是原型基類,具體轉殖類是直線和曲線。

原始碼

#include

#include

using

namespace

std; //

原型基類

. 線條

class

clineprototype;

virtual

clineprototype* clone() = 0; };

//原型具體類

. 直線

class

cbeelineprototype : public

clineprototype;

//拷貝建構函式

cbeelineprototype(const

cbeelineprototype &o)

virtual ~cbeelineprototype(){};

virtual

clineprototype* clone()

void

setweight(const

int &iweight)

void

print()

protected:

intm_iweight; };

//原型具體類

. 曲線

class

ccurveprototype : public

clineprototype;

//拷貝建構函式

ccurveprototype(const

ccurveprototype &o)

virtual ~ccurveprototype(){};

virtual

clineprototype* clone()

void

settype(const

string &m_strtype)

void

print()

protected:

string

m_strtype; };

//client

clineprototype

* clone(clineprototype* pprototype)

intmain()

輸出:

clone a line

beeline weight: 10

clone a curve

beeline type: dot

c 設計模式(原型模式)

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

C 設計模式 原型模式

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。建立型模式中乙個比較特殊的模式 原型模式,有個最大的特點是轉殖乙個現有的物件,這個轉殖的結果有2種,一種是淺度複製,另一種是深度複製。建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速...

C 設計模式 原型模式

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