国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

解析設(shè)計模式中的Prototype原型模式及在C++中的使用

2020-01-26 14:42:20
字體:
供稿:網(wǎng)友

原型模式的意圖是用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。

適用性 
當(dāng)要實例化的類是在運行時刻指定時,例如,通過動態(tài)裝載;或者
為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時;或者
當(dāng)一個類的實例只能有幾個不同狀態(tài)組合中的一種時。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實例化該類更方便一些。

關(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)圖:

201639115129023.jpg (558×202)

原型模式提供了一個通過已存在對象進(jìn)行新對象創(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++要進(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; } 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚松县| 通道| 垣曲县| 九寨沟县| 宜昌市| 兴文县| 沙洋县| 萨嘎县| 垣曲县| 仙桃市| 瑞昌市| 都昌县| 三台县| 磐安县| 芒康县| 图们市| 富蕴县| 泰州市| 罗定市| 莱州市| 广州市| 锦屏县| 浪卡子县| 红原县| 隆昌县| 武陟县| 伊春市| 如皋市| 新疆| 怀远县| 黄龙县| 河曲县| 江安县| 安西县| 普陀区| 桂东县| 孝感市| 乌兰浩特市| 尚义县| 图们市| 安西县|