解析設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用
原型模式的意圖是用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。
適用性
當(dāng)要實(shí)例化的類是在運(yùn)行時刻指定時,例如,通過動態(tài)裝載;或者
為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時;或者
當(dāng)一個類的實(shí)例只能有幾個不同狀態(tài)組合中的一種時。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。
關(guān)于這個模式,突然想到了小時候看的《西游記》,齊天大圣孫悟空再發(fā)飆的時候可以通過自己頭上的 3 根毛立馬復(fù)制出來成千上萬的孫悟空,對付小妖怪很管用(數(shù)量最重要)。
原型模式也正是提供了自我復(fù)制的功能,就是說新對象的創(chuàng)建可以通過已有對象進(jìn)行創(chuàng)建。在 C++中拷貝構(gòu)造函數(shù)(Copy Constructor)曾經(jīng)是很對程序員的噩夢,淺層拷貝和深層拷貝的魔魘也是很多程序員在面試時候的快餐和系統(tǒng)崩潰時候的根源之一。
結(jié)構(gòu)圖:

原型模式提供了一個通過已存在對象進(jìn)行新對象創(chuàng)建的接口(Clone),Clone()實(shí)現(xiàn)和具體的實(shí)現(xiàn)語言相關(guān),在 C++中我們將通過拷貝構(gòu)造函數(shù)實(shí)現(xiàn)之。
例子
注意事項(xiàng):
(1)根據(jù)原型模式的UML圖可以知道,實(shí)現(xiàn)要依賴于抽象要不要依賴與具體
(2)拷貝構(gòu)造函數(shù)是核心,而且針對c++要進(jìn)行的是深拷貝
(3)克隆函數(shù)的關(guān)鍵就是調(diào)用拷貝構(gòu)造函數(shù)
#include <iostream>
using namespace std;
class Student
{
protected:
int id;
char name[10];
public:
Student()
{
}
~Student()
{
cout<<"Desconstuct...."<<endl;
}
virtual Student *Clone()
{}
virtual void Show()
{ }
};
class StudentTypeA:public Student
{
public:
StudentTypeA(const char *name_input)
{
strcpy(name, name_input);
this->id = 0;
cout<<"Construction....."<<endl;
}
StudentTypeA(const StudentTypeA&other)
{
cout<<"Copy Construction..."<<endl;
this->id = other.id;
this->id ++;
strcpy(this->name, other.name);
}
virtual StudentTypeA *Clone()
{
StudentTypeA *tmp = new StudentTypeA(*this);
return tmp;
}
void Show()
{
cout<<"Student id == "<< id << " name == "<< name <<endl;
}
~StudentTypeA()
{
cout<<"Deconstruction StudentTypeA"<<endl;
}
};
int main()
{
Student *student1 = new StudentTypeA("fulima");
Student *student2 = student1->Clone();
Student *student3 = student2->Clone();
student1->Show();
student2->Show();
student3->Show();
return 0;
}
- 全面解析設(shè)計(jì)模式中的建造者模式及相關(guān)C++實(shí)現(xiàn)
- C++設(shè)計(jì)模式編程中Facade外觀模式的使用實(shí)例解析
- 通過C++程序示例理解設(shè)計(jì)模式中的外觀模式
- C++設(shè)計(jì)模式編程中Template Method模板方法模式的運(yùn)用
- 詳解設(shè)計(jì)模式中的模板方法模式及在C++中的使用
- 實(shí)例講解C++編程中對設(shè)計(jì)模式中的原型模式的使用
- C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例
- 淺析設(shè)計(jì)模式中的代理模式在C++編程中的運(yùn)用
- C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解
- 詳解C++設(shè)計(jì)模式編程中對狀態(tài)模式的運(yùn)用
相關(guān)文章
應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)
相對于操作NandFlash,操作NorFlash相對簡單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對容易,下面看個例子吧2013-12-12
C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

