解析設(shè)計模式中的Prototype原型模式及在C++中的使用
原型模式的意圖是用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。
適用性
當要實例化的類是在運行時刻指定時,例如,通過動態(tài)裝載;或者
為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時;或者
當一個類的實例只能有幾個不同狀態(tài)組合中的一種時。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實例化該類更方便一些。
關(guān)于這個模式,突然想到了小時候看的《西游記》,齊天大圣孫悟空再發(fā)飆的時候可以通過自己頭上的 3 根毛立馬復(fù)制出來成千上萬的孫悟空,對付小妖怪很管用(數(shù)量最重要)。
原型模式也正是提供了自我復(fù)制的功能,就是說新對象的創(chuàng)建可以通過已有對象進行創(chuàng)建。在 C++中拷貝構(gòu)造函數(shù)(Copy Constructor)曾經(jīng)是很對程序員的噩夢,淺層拷貝和深層拷貝的魔魘也是很多程序員在面試時候的快餐和系統(tǒng)崩潰時候的根源之一。
結(jié)構(gòu)圖:
原型模式提供了一個通過已存在對象進行新對象創(chuàng)建的接口(Clone),Clone()實現(xiàn)和具體的實現(xiàn)語言相關(guān),在 C++中我們將通過拷貝構(gòu)造函數(shù)實現(xiàn)之。
例子
注意事項:
(1)根據(jù)原型模式的UML圖可以知道,實現(xiàn)要依賴于抽象要不要依賴與具體
(2)拷貝構(gòu)造函數(shù)是核心,而且針對c++要進行的是深拷貝
(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è)計模式中的建造者模式及相關(guān)C++實現(xiàn)
- C++設(shè)計模式編程中Facade外觀模式的使用實例解析
- 通過C++程序示例理解設(shè)計模式中的外觀模式
- C++設(shè)計模式編程中Template Method模板方法模式的運用
- 詳解設(shè)計模式中的模板方法模式及在C++中的使用
- 實例講解C++編程中對設(shè)計模式中的原型模式的使用
- C++設(shè)計模式編程中proxy代理模式的使用實例
- 淺析設(shè)計模式中的代理模式在C++編程中的運用
- C++編程中使用設(shè)計模式中的policy策略模式的實例講解
- 詳解C++設(shè)計模式編程中對狀態(tài)模式的運用
相關(guān)文章
C++ 實現(xiàn)求最大公約數(shù)和最小公倍數(shù)
這篇文章主要介紹了c++ 實現(xiàn)求最大公約數(shù)和最小公倍數(shù)的相關(guān)資料,需要的朋友可以參考下2017-05-05一文帶你了解C語言中的動態(tài)內(nèi)存管理函數(shù)
C語言中內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,這篇文章主要為大家講解一下這四個函數(shù)的具體用法,需要的可以參考一下2023-03-03c語言for、while和do-while循環(huán)之間的區(qū)別
大家好,本篇文章主要講的是c語言for、while和do-while循環(huán)之間的區(qū)別,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01