C 設計模式 原型模式

2021-10-14 07:44:02 字數 2605 閱讀 7488

prototype模式是一種物件建立型模式,它採取複製原型物件的方法來建立物件的例項。使用prototype模式建立的例項,具有與原型一樣的資料。

1)由原型物件自身建立目標物件。也就是說,物件建立這一動作發自原型物件本身。

2)目標物件是原型物件的乙個轉殖。也就是說,通過prototype模式建立的物件,不僅僅與原型物件具有相同的結構,還與原型物件具有相同的值。

3)根據物件轉殖深度層次的不同,有淺度轉殖與深度轉殖。

原型模式主要面對的問題是:「某些結構複雜的物件」的建立工作;由於需求的變化,這些物件經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的介面。

適用情況:

​ 乙個複雜物件,具有自我複製功能,統一一套介面。

利用c++ 拷貝建構函式已經實現了原型模式的注意事項:

這裡顯示的是原型模式如何拓展**

原型模式需要注意的是堆區記憶體的動態申請與釋放,此處沒有類圖

父類必須有虛析構函式

class cpu 

;cpu::~

cpu(

)

class intelcpu : public cpu 

else

}// 過載建構函式

// 析構函式

~intelcpu()

}// 實現拷貝介面

virtual cpu *

clone()

virtual cpu *

deepclone()

// 功能函式

};

class intelcpu : public cpu 

// 拷貝建構函式

intelcpu

(const intelcpu &cpu)

else

}// 過載建構函式

intelcpu

(string version,

int year)

// 析構函式

~intelcpu()

}// 實現拷貝介面

virtual cpu *

clone()

virtual cpu *

deepclone()

// 功能函式

void

setinfo

(char

*p) m_info = new char

[strlen

(p)+1]

;strcpy

(m_info, p);}

virtual char

*getinfo()

virtual void

printinfo()

private:

string m_version;

int m_year;

private:

char

*m_info;

};

virtual cpu *

deepclone()

else

return tmp;

}

cpu *cpu1 = new intelcpu

("第一代",2

);// 這裡是多型呼叫

cpu1->

setinfo

("第一代cpu");

cpu *cpu2 = cpu1->

deepclone()

;// 深拷貝

cpu1->

setinfo

("第一代cpu公升級了 ... ");

cout <<

"列印cpu1..."

<< endl;

cpu1->

printinfo()

;cout <<

"列印cpu2..."

<< endl;

cpu2->

printinfo()

;if(nullptr == cpu1)

if(nullptr == cpu2)

intelcpu *cpu1 = new intelcpu

("8550",2

);// 這裡是呼叫拷貝建構函式

cpu1->

setinfo

("第一代cpu");

intelcpu *cpu2 = new intelcpu

(*cpu1)

;cpu1->

setinfo

("第一代cpu公升級了");

cout <<

"列印cpu1..."

<< endl;

cpu1->

printinfo()

;cout <<

"列印cpu2..."

<< endl;

cpu2->

printinfo()

;if(nullptr == cpu1)

if(nullptr == cpu2)

C 設計模式 原型模式

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

c 設計模式(原型模式)

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

C 設計模式 原型模式

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