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

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

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

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

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

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

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

結(jié)構(gòu)圖:

201639115129023.jpg (558×202)

原型模式提供了一個(gè)通過已存在對(duì)象進(jìn)行新對(duì)象創(chuàng)建的接口(Clone),Clone()實(shí)現(xiàn)和具體的實(shí)現(xiàn)語(yǔ)言相關(guān),在 C++中我們將通過拷貝構(gòu)造函數(shù)實(shí)現(xiàn)之。

例子
注意事項(xiàng):
(1)根據(jù)原型模式的UML圖可以知道,實(shí)現(xiàn)要依賴于抽象要不要依賴與具體
(2)拷貝構(gòu)造函數(shù)是核心,而且針對(duì)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; 
} 

相關(guān)文章

  • C語(yǔ)言聯(lián)合體類型的實(shí)現(xiàn)

    C語(yǔ)言聯(lián)合體類型的實(shí)現(xiàn)

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

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

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

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

    相對(duì)于操作NandFlash,操作NorFlash相對(duì)簡(jiǎn)單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對(duì)容易,下面看個(gè)例子吧
    2013-12-12
  • C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池的示例代碼

    C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池的示例代碼

    本文主要介紹了C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++實(shí)現(xiàn)LeetCode(126.詞語(yǔ)階梯之二)

    C++實(shí)現(xiàn)LeetCode(126.詞語(yǔ)階梯之二)

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

    Unity編輯器下重啟的方法

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

    C++ vector類的模擬實(shí)現(xiàn)方法

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

    C語(yǔ)言各種變量的初始化方式

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

    C語(yǔ)言進(jìn)階之文件操作詳解

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

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

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

最新評(píng)論

涿州市| 台山市| 沭阳县| 古丈县| 马尔康县| 理塘县| 阿克苏市| 庆元县| 全州县| 南岸区| 靖安县| 宜君县| 清水县| 黑水县| 新乡县| 鄢陵县| 南陵县| 吉木乃县| 融水| 绿春县| 洱源县| 建瓯市| 镇江市| 鄂托克旗| 富宁县| 石台县| 岳普湖县| 大冶市| 诸暨市| 高清| 长兴县| 定结县| 福清市| 祥云县| 新余市| 景谷| 石首市| 琼结县| 正镶白旗| 凤山县| 岳普湖县|