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

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

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

2020-05-23 14:08:06
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了設計模式中的Prototype原型模式及在C++中的使用,需要的朋友可以參考下
 

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

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

關于這個模式,突然想到了小時候看的《西游記》,齊天大圣孫悟空再發飆的時候可以通過自己頭上的 3 根毛立馬復制出來成千上萬的孫悟空,對付小妖怪很管用(數量最重要)。

原型模式也正是提供了自我復制的功能,就是說新對象的創建可以通過已有對象進行創建。在 C++中拷貝構造函數(Copy Constructor)曾經是很對程序員的噩夢,淺層拷貝和深層拷貝的魔魘也是很多程序員在面試時候的快餐和系統崩潰時候的根源之一。

結構圖:

設計模式,Prototype,C++

原型模式提供了一個通過已存在對象進行新對象創建的接口(Clone),Clone()實現和具體的實現語言相關,在 C++中我們將通過拷貝構造函數實現之。

例子
注意事項:
(1)根據原型模式的UML圖可以知道,實現要依賴于抽象要不要依賴與具體
(2)拷貝構造函數是核心,而且針對c++要進行的是深拷貝
(3)克隆函數的關鍵就是調用拷貝構造函數

#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; } 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘潭县| 孝义市| 秦安县| 电白县| 泉州市| 莫力| 南宫市| 修武县| 伊川县| 恩平市| 咸丰县| 上饶市| 鸡西市| 青龙| 元阳县| 西林县| 甘孜| 江陵县| 兴业县| 清镇市| 吉安县| 三亚市| 自贡市| 福安市| 双柏县| 桐梓县| 宁津县| 武陟县| 元氏县| 弥勒县| 上饶县| 奇台县| 陵水| 丹巴县| 阿城市| 临清市| 灵宝市| 红原县| 临湘市| 沅陵县| 秀山|