欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析設(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ù)制出來成千上萬的孫悟空,對(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)語言相關(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)文章

  • OpenCV識(shí)別圖像上的線條軌跡

    OpenCV識(shí)別圖像上的線條軌跡

    這篇文章主要為大家詳細(xì)介紹了OpenCV識(shí)別圖像上的線條軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • c語言printf函數(shù)的使用詳解

    c語言printf函數(shù)的使用詳解

    本篇文章是對(duì)c語言中printf函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)

    C++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)

    這篇文章主要介紹了c++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++11中多線程編程-std::async的深入講解

    C++11中多線程編程-std::async的深入講解

    這篇文章主要給大家介紹了關(guān)于C++11中多線程編程-std::async的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++文件讀和寫的使用

    C++文件讀和寫的使用

    本文主要介紹了C++文件讀和寫的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文帶你了解C語言中的動(dòng)態(tài)內(nèi)存管理函數(shù)

    一文帶你了解C語言中的動(dòng)態(tài)內(nèi)存管理函數(shù)

    C語言中內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,這篇文章主要為大家講解一下這四個(gè)函數(shù)的具體用法,需要的可以參考一下
    2023-03-03
  • C++中的類模板詳解及示例

    C++中的類模板詳解及示例

    我們?cè)诙x函數(shù)時(shí),可以通過定義函數(shù)模板,來簡化一些功能相同而數(shù)據(jù)類型不同的函數(shù)的定義和調(diào)用過程
    2013-10-10
  • c語言for、while和do-while循環(huán)之間的區(qū)別

    c語言for、while和do-while循環(huán)之間的區(qū)別

    大家好,本篇文章主要講的是c語言for、while和do-while循環(huán)之間的區(qū)別,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語言實(shí)現(xiàn)繪制可愛的橘子鐘表

    C語言實(shí)現(xiàn)繪制可愛的橘子鐘表

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)繪制可愛的橘子鐘表,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2022-12-12
  • C++中4種類型轉(zhuǎn)換方式 cast操作詳解

    C++中4種類型轉(zhuǎn)換方式 cast操作詳解

    static_cast,支持子類指針到父類指針的轉(zhuǎn)換,并根據(jù)實(shí)際情況調(diào)整指針的值,反過來也支持,但會(huì)給出編譯警告,它作用最類似C風(fēng)格的“強(qiáng)制轉(zhuǎn)換”,一般來說可認(rèn)為它是安全的
    2013-10-10

最新評(píng)論