青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

設計模式C++實現(5)——原型模式、模板方法模式 --- 轉

       軟件領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態,真正領悟設計 模式的精髓是可能一個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對于每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設計 模式》和《設計模式:可復用面向對象軟件的基礎》(DP)兩本書。本文介紹原型模式和模板方法模式的實現。首先介紹原型模式,然后引出模板方法模式。

       DP書上的定義為:用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。其中有一個詞很重要,那就是拷貝??梢哉f,拷貝是原型模式的精髓 所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有打印設備,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷, 如果要修改簡歷中的某項,那么所有已寫好的簡歷都要修改,工作量很大。隨著科技的進步,出現了打印設備。我們只需手寫一份,然后利用打印設備復印多份即 可。如果要修改簡歷中的某項,那么修改原始的版本就可以了,然后再復印。原始的那份手寫稿相當于是一個原型,有了它,就可以通過復?。截悾﹦撛斐龈嗟?新簡歷。這就是原型模式的基本思想。下面給出原型模式的UML圖,以剛才那個例子為實例。


        原型模式實現的關鍵就是實現Clone函數,對于C++來說,其實就是拷貝構造函數,需實現深拷貝,下面給出一種實現。

  1. //父類  
  2. class Resume  
  3. {  
  4. protected:  
  5.     char *name;  
  6. public:  
  7.     Resume() {}  
  8.     virtual ~Resume() {}  
  9.     virtual Resume* Clone() { return NULL; }  
  10.     virtual void Set(char *n) {}  
  11.     virtual void Show() {}  
  12. };  
  1. class ResumeA : public Resume  
  2. {  
  3. public:  
  4.     ResumeA(const char *str);  //構造函數  
  5.     ResumeA(const ResumeA &r); //拷貝構造函數  
  6.     ~ResumeA();                //析構函數  
  7.     ResumeA* Clone();          //克隆,關鍵所在  
  8.     void Show();               //顯示內容  
  9. };  
  10. ResumeA::ResumeA(const char *str)   
  11. {  
  12.     if(str == NULL) {  
  13.         name = new char[1];   
  14.         name[0] = '\0';   
  15.     }  
  16.     else {  
  17.         name = new char[strlen(str)+1];  
  18.         strcpy(name, str);  
  19.     }  
  20. }  
  21. ResumeA::~ResumeA() { delete [] name;}  
  22. ResumeA::ResumeA(const ResumeA &r) {  
  23.     name = new char[strlen(r.name)+1];  
  24.     strcpy(name, r.name);  
  25. }  
  26. ResumeA* ResumeA::Clone() {  
  27.     return new ResumeA(*this);  
  28. }  
  29. void ResumeA::Show() {  
  30.     cout<<"ResumeA name : "<<name<<endl;   
  31. }  

          這里只給出了ResumeA的實現,ResumeB的實現類似。使用的方式如下:

  1. int main()  
  2. {  
  3.     Resume *r1 = new ResumeA("A");  
  4.     Resume *r2 = new ResumeB("B");  
  5.     Resume *r3 = r1->Clone();  
  6.     Resume *r4 = r2->Clone();  
  7.     r1->Show(); r2->Show();  
  8.     //刪除r1,r2  
  9.     delete r1; delete r2;     
  10.     r1 = r2 = NULL;  
  11.     //深拷貝所以對r3,r4無影響  
  12.     r3->Show(); r4->Show();  
  13.     delete r3; delete r4;  
  14.     r3 = r4 = NULL;  
  15. }  

       最近有個招聘會,可以帶上簡歷去應聘了。但是,其中有一家公司不接受簡歷,而是給應聘者發了一張簡歷表,上面有基本信息、教育背景、工作經歷等欄,讓應 聘者按照要求填寫完整。每個人拿到這份表格后,就開始填寫。如果用程序實現這個過程,該如何做呢?一種方案就是用模板方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。我們的例子中,操作就是填寫簡歷這一過程,我們可以在父類中定義操作的算法骨架,而具體的實現由子類完成。下面給出它的UML圖。

       其中FillResume() 定義了操作的骨架,依次調用子類實現的函數。相當于每個人填寫簡歷的實際過程。接著給出相應的C++代碼。

  1. //簡歷  
  2. class Resume  
  3. {  
  4. protected: //保護成員  
  5.     virtual void SetPersonalInfo() {}  
  6.     virtual void SetEducation() {}  
  7.     virtual void SetWorkExp() {}  
  8. public:  
  9.     void FillResume()   
  10.     {  
  11.         SetPersonalInfo();  
  12.         SetEducation();  
  13.         SetWorkExp();  
  14.     }  
  15. };  
  16. class ResumeA: public Resume  
  17. {  
  18. protected:  
  19.     void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }  
  20.     void SetEducation() { cout<<"A's Education"<<endl; }  
  21.     void SetWorkExp() { cout<<"A's Work Experience"<<endl; }  
  22. };  
  23. class ResumeB: public Resume  
  24. {  
  25. protected:  
  26.     void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }  
  27.     void SetEducation() { cout<<"B's Education"<<endl; }  
  28.     void SetWorkExp() { cout<<"B's Work Experience"<<endl; }  
  29. };  

        使用方式如下:

  1. int main()  
  2. {  
  3.     Resume *r1;  
  4.     r1 = new ResumeA();  
  5.     r1->FillResume();  
  6.     delete r1;  
  7.     r1 = new ResumeB();  
  8.     r1->FillResume();  
  9.     delete r1;  
  10.     r1 = NULL;  
  11.     return 0;  
  12. }  
           本人享有博客文章的版權,轉載請標明出處 http://blog.csdn.net/wuzhekai1985

posted on 2013-09-05 18:46 大龍 閱讀(332) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲第一搞黄网站| 一区二区在线视频播放| 亚洲专区在线视频| 一本色道久久综合亚洲精品婷婷| 欧美一区二区免费| 99re66热这里只有精品3直播 | 亚洲国产婷婷| 亚洲成色777777在线观看影院| 亚洲国产天堂久久综合网| 噜噜噜91成人网| 一本一本久久a久久精品综合麻豆| 亚洲欧洲av一区二区| 欧美亚洲视频在线观看| 国语自产精品视频在线看一大j8 | 中文av字幕一区| 国产日韩欧美黄色| 嫩草国产精品入口| 欧美日韩国产黄| 欧美在线免费| 欧美激情第五页| 欧美一区=区| 久热国产精品视频| 亚洲欧美另类综合偷拍| 久久精品一本| 亚洲一区在线播放| 久久精品国产99国产精品澳门 | 久久激情视频久久| 91久久久久久久久| 亚洲免费视频在线观看| 亚洲精品久久久久久久久久久| 午夜精品福利在线| 美女诱惑黄网站一区| 小黄鸭精品密入口导航| 久久久亚洲欧洲日产国码αv| 国产欧美亚洲精品| 亚洲片在线资源| 国产一区二区三区四区三区四| 亚洲一级在线观看| 欧美1区视频| 久久久www| 国产精品欧美日韩久久| 亚洲国产老妈| 好男人免费精品视频| 中文高清一区| 亚洲天堂av图片| 你懂的国产精品| 久久人人爽人人爽| 国产精品三区www17con| 一本色道久久88精品综合| 亚洲精品午夜| 久久综合中文色婷婷| 久久婷婷av| 国内精品伊人久久久久av一坑| 欧美一区二区三区喷汁尤物| 欧美高清视频一区二区| 免费亚洲电影在线观看| 国内精品久久久久久久97牛牛| 久久久人成影片一区二区三区| 久久国产精品72免费观看| 国产精品99久久久久久www| 欧美大片一区| 亚洲国产精品激情在线观看| 亚洲成色精品| 久久深夜福利免费观看| 免费观看一区| 亚洲国产日韩综合一区| 另类欧美日韩国产在线| 欧美成年人在线观看| 1000部国产精品成人观看| 久久精品夜色噜噜亚洲aⅴ| 久久在线免费视频| 136国产福利精品导航网址| 美女国内精品自产拍在线播放| 一区二区三区.www| 欧美日韩一区二区在线观看视频| 欧美中文字幕第一页| 国产欧美欧洲在线观看| 午夜在线视频一区二区区别| 欧美专区第一页| 国产一区二区三区在线观看网站| 亚洲国产婷婷综合在线精品| 亚洲欧洲日本一区二区三区| 欧美另类videos死尸| 一区二区三区国产| 久久久久久久999| 精品福利免费观看| 欧美二区在线| 一区二区欧美在线| 欧美在线网址| 亚洲精品1区| 国产精品黄视频| 久久精品国产2020观看福利| 亚洲福利视频网| 午夜精品久久久久久久| 黄色资源网久久资源365| 牛牛影视久久网| 亚洲综合日本| 欧美国产日产韩国视频| 亚洲一区二区三区精品在线| 国内精品免费在线观看| 欧美激情aⅴ一区二区三区| 亚洲一区中文字幕在线观看| 另类专区欧美制服同性| 亚洲免费伊人电影在线观看av| 欧美成人蜜桃| 性欧美精品高清| 亚洲精品中文字幕有码专区| 午夜精品一区二区三区在线| 亚洲黄色免费| 国产情人节一区| 欧美日韩精品免费观看视一区二区 | 午夜精品久久久久久久蜜桃app | 国产午夜亚洲精品羞羞网站| 美乳少妇欧美精品| 午夜精品久久久久久久久久久久| 一区二区三区精品视频在线观看| 免费亚洲一区二区| 亚洲欧美日韩国产综合在线| 亚洲成色777777在线观看影院| 在线观看日韩www视频免费| 国产精品久久久久一区二区三区共 | 影音国产精品| 国产伦精品一区二区三区高清版| 亚洲视频在线观看一区| 亚洲国产经典视频| 久久久亚洲综合| 欧美中文字幕久久| 欧美一级日韩一级| 亚洲综合精品四区| 亚洲婷婷在线| 一区二区国产日产| 亚洲精品国产日韩| 亚洲高清在线观看| 亚洲黄一区二区三区| 在线视频国产日韩| 永久免费精品影视网站| 激情懂色av一区av二区av| 国产精品尤物福利片在线观看| 午夜精品视频在线| 亚洲综合电影一区二区三区| 夜夜狂射影院欧美极品| 亚洲美女毛片| 日韩午夜在线| 日韩午夜电影在线观看| aa日韩免费精品视频一| 日韩一级黄色av| 一区二区三区欧美日韩| 一区二区av| 午夜激情久久久| 久久国产精品亚洲va麻豆| 久久精彩免费视频| 免播放器亚洲| 免费久久99精品国产自在现线| 99爱精品视频| 亚洲欧美日韩爽爽影院| 欧美在线播放一区| 另类尿喷潮videofree | 亚洲肉体裸体xxxx137| 亚洲国产日韩一级| 一区二区av| 欧美一区二区在线免费播放| 久久亚洲美女| 欧美精品www在线观看| 欧美日韩在线电影| 国产欧美一区二区精品忘忧草| 欧美成人按摩| 欧美午夜精品久久久久久浪潮| 久久国产乱子精品免费女| 久热国产精品视频| 欧美日韩一区二区三区免费看| 久久精品夜色噜噜亚洲aⅴ| 麻豆freexxxx性91精品| 欧美午夜精品久久久久久浪潮 | 亚洲午夜小视频| 欧美一区二粉嫩精品国产一线天| 亚洲人成77777在线观看网| 亚洲图片在线| 鲁鲁狠狠狠7777一区二区| 欧美日韩一区自拍| 韩日精品视频| 亚洲女性裸体视频| 欧美国产日产韩国视频| 亚洲一区二区四区| 欧美顶级艳妇交换群宴| 国产精品永久免费在线| 亚洲级视频在线观看免费1级| 国产综合激情| 亚洲一区制服诱惑| 欧美成人精品一区| 亚洲欧美电影院| 欧美女激情福利| 狠狠入ady亚洲精品| 亚洲午夜激情网页| 欧美国产综合一区二区| 午夜伦欧美伦电影理论片| 欧美日韩极品在线观看一区| 亚洲第一精品福利| 久久精品1区| 一区二区三区偷拍| 欧美精品国产精品|