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

大龍的博客

常用鏈接

統(tǒng)計

最新評論

設(shè)計模式C++實現(xiàn)(5)——原型模式、模板方法模式 --- 轉(zhuǎn)

       軟件領(lǐng)域中的設(shè)計模式為開發(fā)人員提供了一種使用專家設(shè)計經(jīng)驗的有效途徑。設(shè)計模式中運用了面向?qū)ο缶幊陶Z言的重要特性:封裝、繼承、多態(tài),真正領(lǐng)悟設(shè)計 模式的精髓是可能一個漫長的過程,需要大量實踐經(jīng)驗的積累。最近看設(shè)計模式的書,對于每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設(shè)計 模式》和《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(DP)兩本書。本文介紹原型模式和模板方法模式的實現(xiàn)。首先介紹原型模式,然后引出模板方法模式。

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


        原型模式實現(xiàn)的關(guān)鍵就是實現(xiàn)Clone函數(shù),對于C++來說,其實就是拷貝構(gòu)造函數(shù),需實現(xiàn)深拷貝,下面給出一種實現(xiàn)。

  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);  //構(gòu)造函數(shù)  
  5.     ResumeA(const ResumeA &r); //拷貝構(gòu)造函數(shù)  
  6.     ~ResumeA();                //析構(gòu)函數(shù)  
  7.     ResumeA* Clone();          //克隆,關(guān)鍵所在  
  8.     void Show();               //顯示內(nèi)容  
  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的實現(xiàn),ResumeB的實現(xiàn)類似。使用的方式如下:

  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. }  

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

       其中FillResume() 定義了操作的骨架,依次調(diào)用子類實現(xiàn)的函數(shù)。相當(dāng)于每個人填寫簡歷的實際過程。接著給出相應(yīng)的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. }  
           本人享有博客文章的版權(quán),轉(zhuǎn)載請標(biāo)明出處 http://blog.csdn.net/wuzhekai1985

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            欧美一区1区三区3区公司| 久久av在线| 国产一区二区0| 国产麻豆视频精品| 国产精品亚洲综合天堂夜夜 | 亚洲级视频在线观看免费1级| 欧美韩日亚洲| 亚洲免费观看视频| 宅男在线国产精品| 欧美一二三区在线观看| 欧美在线一区二区三区| 蜜桃av一区二区三区| 欧美色图五月天| 韩国av一区二区三区在线观看| 伊人久久噜噜噜躁狠狠躁| 亚洲美女视频在线免费观看| 亚洲欧美国产视频| 久久中文在线| 99视频精品全部免费在线| 久久国产精品第一页| 久久精品综合网| 欧美.www| 亚洲综合色噜噜狠狠| 久久免费的精品国产v∧| 欧美激情精品久久久久| 国产精品一区视频网站| 亚洲三级视频| 麻豆成人综合网| 99热精品在线| 美腿丝袜亚洲色图| 国产精品视频一二三| 亚洲国产一区二区视频| 午夜视频一区二区| 亚洲日本激情| 久久阴道视频| 国内成人精品一区| 新67194成人永久网站| 亚洲第一成人在线| 欧美一区二区视频网站| 欧美视频中文一区二区三区在线观看 | 亚洲人成久久| 久久先锋影音| 午夜视频在线观看一区二区三区| 欧美精品系列| 91久久精品国产91久久性色| 久久久精品性| 午夜精品av| 国产精品久久久久久一区二区三区 | 午夜一区二区三视频在线观看| 欧美激情国产精品| 久久久久久久久久久一区| 国产精品一区一区三区| 亚洲视频综合在线| 亚洲精品美女91| 欧美高清视频一区二区三区在线观看| 激情久久综合| 久久综合色播五月| 久久女同精品一区二区| 亚洲第一主播视频| 香港久久久电影| 欧美激情亚洲自拍| 亚洲精品五月天| 亚洲国产成人精品视频| 男人插女人欧美| 亚洲精品一区二区三区樱花| 亚洲第一中文字幕在线观看| 久久久在线视频| 亚洲国产高清视频| 欧美激情视频一区二区三区在线播放 | 亚洲尤物在线| 亚洲一区影音先锋| 国产欧美韩日| 欧美成人免费大片| 欧美欧美全黄| 欧美一级理论性理论a| 午夜视频一区在线观看| 精品成人一区二区三区| 亚洲国产精品一区制服丝袜| 欧美精品在线一区| 亚洲欧美在线看| 久久爱www.| 亚洲伦理在线免费看| 99热免费精品| 国内精品久久久久国产盗摄免费观看完整版 | 99精品欧美一区二区三区综合在线| 亚洲国产另类久久久精品极度| 欧美—级在线免费片| 香蕉久久精品日日躁夜夜躁| 欧美一区二区三区日韩视频| 亚洲国产成人久久综合一区| 一片黄亚洲嫩模| 精品88久久久久88久久久| 亚洲人成毛片在线播放| 国产欧美日韩视频一区二区三区 | 亚洲在线视频免费观看| 一区二区三区亚洲| 99re66热这里只有精品4| 国产午夜精品久久久| 91久久久精品| 国内自拍一区| 亚洲一级二级在线| 亚洲日本欧美日韩高观看| 亚洲在线观看视频网站| 亚洲精品乱码久久久久久日本蜜臀| 亚洲亚洲精品在线观看| 亚洲欧洲免费视频| 久久精品国产免费观看| 亚洲欧美久久久| 欧美成人激情视频| 另类激情亚洲| 国产日韩精品视频一区| av不卡在线看| 欧美一区二区三区另类| 国产日本亚洲高清| 欧美成年人在线观看| 国产精品免费网站在线观看| 亚洲国产精品传媒在线观看| 国产一区二区三区不卡在线观看| 日韩午夜在线| 亚洲免费av观看| 久久综合五月| 久久综合色一综合色88| 国产日韩欧美中文| 亚洲一区二区三区在线播放| 99re6这里只有精品| 美女福利精品视频| 浪潮色综合久久天堂| 国产精品一区在线观看| 一区二区三区 在线观看视| 日韩视频中午一区| 欧美国产精品va在线观看| 老司机久久99久久精品播放免费| 国产精品九九| 亚洲视频一二| 先锋影音国产精品| 国产精品系列在线播放| 亚洲影视在线播放| 欧美一区三区二区在线观看| 国产精品一区二区久久久久| 亚洲网站在线看| 亚洲——在线| 国产亚洲成人一区| 久久久www| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美激情视频一区二区三区在线播放 | 国内精品写真在线观看| 久久国产黑丝| 女女同性精品视频| 亚洲乱码国产乱码精品精 | 欧美在线观看日本一区| 久久精品综合一区| 亚洲高清久久久| 欧美精品日韩精品| 中日韩视频在线观看| 欧美在线观看视频| 伊人伊人伊人久久| 欧美精品在线播放| 亚洲一区在线观看视频 | 一区二区三区高清在线观看| 午夜精品久久久久久久久| 国产偷自视频区视频一区二区| 久久精品亚洲| 91久久国产自产拍夜夜嗨| 亚洲欧美日韩专区| 精品动漫3d一区二区三区免费版| 男女视频一区二区| 美女被久久久| 欧美高清你懂得| 99综合在线| 国产一区在线视频| 欧美激情按摩| 香蕉尹人综合在线观看| 欧美激情影音先锋| 欧美一区2区视频在线观看| 在线观看久久av| 国产精品成人午夜| 毛片精品免费在线观看| 亚洲一区二三| 亚洲国产一区二区三区高清 | 亚洲激情网站| 国产免费成人| 欧美精品观看| 久久久久一区二区三区四区| 夜夜夜久久久| 亚洲欧洲在线视频| 开心色5月久久精品| 亚洲自拍偷拍网址| 亚洲精品中文字幕女同| 国产一区二区三区免费观看| 欧美日韩亚洲在线| 男男成人高潮片免费网站| 校园激情久久| 一本色道久久综合| 亚洲国产日韩一区二区| 久久午夜激情| 久久久久久久999精品视频| 亚洲一区网站| 在线视频中文亚洲| 日韩一级精品视频在线观看| 亚洲第一视频|