最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年03月09日 11:51:25   作者:mafuli007  
這篇文章主要介紹了設計模式中的Prototype原型模式及在C++中的使用,需要的朋友可以參考下

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

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

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

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

結構圖:

201639115129023.jpg (558×202)

原型模式提供了一個通過已存在對象進行新對象創(chuàng)建的接口(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; 
} 

相關文章

  • C語言聯(lián)合體類型的實現

    C語言聯(lián)合體類型的實現

    聯(lián)合體也是一種構造數據類型,和結構體類型一樣,它也是由各種不同類型的數據組成,本文主要介紹了C語言聯(lián)合體類型的實現,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Matlab繪制酷炫坐標區(qū)域的方法詳解

    Matlab繪制酷炫坐標區(qū)域的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Matlab編寫一個能讓坐標區(qū)域變得很炫酷的修飾函數,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-05-05
  • 應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    相對于操作NandFlash,操作NorFlash相對簡單,因為基本不需要考慮壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關系。讀寫擦除相對容易,下面看個例子吧
    2013-12-12
  • C++實現一個簡單的線程池的示例代碼

    C++實現一個簡單的線程池的示例代碼

    本文主要介紹了C++實現一個簡單的線程池的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C++實現LeetCode(126.詞語階梯之二)

    C++實現LeetCode(126.詞語階梯之二)

    這篇文章主要介紹了C++實現LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • Unity編輯器下重啟的方法

    Unity編輯器下重啟的方法

    這篇文章主要介紹了Unity編輯器下重啟的方法的相關資料,希望通過本文能幫助到大家,讓大家學習理解這部分內容,需要的朋友可以參考下
    2017-10-10
  • C++ vector類的模擬實現方法

    C++ vector類的模擬實現方法

    這篇文章主要介紹了C++ vector類的模擬實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C語言各種變量的初始化方式

    C語言各種變量的初始化方式

    這篇文章主要介紹了C語言各種變量的初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • C語言進階之文件操作詳解

    C語言進階之文件操作詳解

    這篇文章主要為大家詳細介紹了C語言進階之文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++中std::optional的使用指南分享

    C++中std::optional的使用指南分享

    C++?17?引入了std::optional,表示一個可能有值的對象,這篇文章主要來和大家聊聊std::optional的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-06-06

最新評論

新化县| 富顺县| 嘉荫县| 高雄县| 尼勒克县| 民乐县| 苍梧县| 宜兴市| 玉山县| 双流县| 永平县| 鄂托克前旗| 山阳县| 四平市| 东明县| 榆林市| 舒兰市| 陵川县| 西贡区| 余江县| 紫金县| 新闻| 饶平县| 平凉市| 铁岭县| 咸阳市| 上饶市| 五峰| 罗定市| 拜泉县| 额敏县| 安泽县| 蓬安县| 江源县| 肥乡县| 鹤峰县| 周宁县| 收藏| 巴南区| 塔河县| 商河县|