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種,一種是淺度複製,另一種是深度複製。建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速...