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

大龍的博客

常用鏈接

統(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)建新的對象。其中有一個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓 所在。舉個現(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 大龍 閱讀(332) 評論(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>
            黑人巨大精品欧美黑白配亚洲| 欧美岛国在线观看| 99国内精品| 亚洲高清123| 久久九九精品| 亚洲一区三区在线观看| 亚洲三级免费| 亚洲国产成人久久| 一区二区在线观看视频| 国产精品蜜臀在线观看| 欧美日韩蜜桃| 欧美精品日韩一本| 久久综合久久综合久久综合| 欧美在线观看视频一区二区| 亚洲女女女同性video| 一区二区三区国产在线观看| 亚洲黄色成人网| 亚洲第一中文字幕在线观看| 久久亚洲综合网| 久久精品一区| 欧美专区在线观看一区| 亚洲免费在线电影| 亚洲一区二区精品视频| 亚洲小视频在线观看| 99re6这里只有精品视频在线观看| 亚洲福利视频二区| 亚洲高清123| 亚洲激情自拍| 亚洲精品视频在线观看免费| 亚洲高清不卡在线| 91久久精品www人人做人人爽| 亚洲国产成人在线| 亚洲国产综合91精品麻豆| 伊人色综合久久天天五月婷| 在线观看91久久久久久| 亚洲第一精品在线| 亚洲欧洲在线看| 亚洲免费观看高清在线观看 | 欧美激情综合色| 欧美精品一区二区三区蜜臀| 欧美精品一区三区在线观看| 欧美猛交免费看| 欧美性天天影院| 国产精品手机在线| 国产日韩欧美亚洲一区| 影音先锋久久资源网| 亚洲福利视频一区二区| 日韩一级视频免费观看在线| a4yy欧美一区二区三区| 亚洲你懂的在线视频| 久久激情综合| 欧美超级免费视 在线| 亚洲国产视频直播| 亚洲图片欧洲图片av| 久久国产精品久久久久久久久久| 久久免费视频这里只有精品| 欧美激情女人20p| 国产精品入口尤物| 亚洲第一区在线| 亚洲最新在线| 欧美在线视频网站| 欧美电影美腿模特1979在线看| 亚洲精品欧美日韩| 亚洲女爱视频在线| 蜜桃av一区| 国产精品你懂的在线欣赏| 精品二区久久| 亚洲一区三区视频在线观看| 久久久一本精品99久久精品66| 亚洲国产三级| 午夜日韩在线观看| 欧美黄色一级视频| 国内精品久久久久久久果冻传媒| 91久久精品美女高潮| 午夜欧美理论片| 欧美国产1区2区| 亚洲欧美国产精品va在线观看| 蜜桃久久精品一区二区| 国产精品久久久一区二区| 亚洲福利国产精品| 新片速递亚洲合集欧美合集| 亚洲成人直播| 羞羞漫画18久久大片| 欧美精品观看| 激情久久久久久| 亚洲欧美99| 91久久综合| 久久久综合精品| 国产精品青草久久久久福利99| 亚洲人成77777在线观看网| 香蕉久久夜色精品国产| 亚洲日本电影在线| 久久福利一区| 国产精品永久在线| 一区二区三区回区在观看免费视频 | 亚洲电影在线看| 欧美一区二区三区四区夜夜大片| 欧美理论电影在线播放| 1000部精品久久久久久久久| 久久精品成人| 中文欧美日韩| 欧美日韩爆操| 亚洲欧洲一区二区三区在线观看| 久久久亚洲一区| 亚洲综合二区| 国产精品国产三级国产专播精品人| 亚洲日本免费电影| 蜜桃av一区二区在线观看| 欧美一区二区网站| 国产精品一区视频| 亚洲欧美国产不卡| 99在线|亚洲一区二区| 欧美精品国产精品| 亚洲美女电影在线| 亚洲国产欧美在线| 噜噜噜躁狠狠躁狠狠精品视频| 狠狠色狠狠色综合日日tαg | 亚洲一区日韩在线| 日韩视频一区二区三区| 欧美护士18xxxxhd| 亚洲免费成人av电影| 亚洲激情国产| 欧美国产三级| aaa亚洲精品一二三区| 亚洲精品久久久蜜桃| 欧美精品性视频| av不卡在线| 夜夜嗨av一区二区三区四区| 欧美日韩国产首页在线观看| 一区二区免费在线播放| 亚洲免费观看高清在线观看 | 美腿丝袜亚洲色图| 亚洲国产小视频| 亚洲国产日韩欧美在线动漫| 欧美不卡高清| 夜夜爽www精品| 日韩视频免费在线观看| 欧美日韩专区在线| 亚洲欧美一区二区三区久久 | 欧美日韩精品欧美日韩精品| 一区二区三区导航| 亚洲午夜女主播在线直播| 国产精品中文字幕欧美| 久久久综合香蕉尹人综合网| 久久久久久69| 亚洲精品国产视频| 夜夜嗨一区二区| 国产亚洲成年网址在线观看| 久久综合图片| 欧美久久久久久久| 午夜精品久久| 久久久av毛片精品| 亚洲精品午夜精品| 亚洲天堂av高清| 国产曰批免费观看久久久| 欧美成人有码| 欧美日韩免费观看一区| 欧美一区2区视频在线观看| 欧美在线影院| 亚洲精品之草原avav久久| 一区二区三区 在线观看视| 国产午夜精品理论片a级探花 | 欧美视频日韩| 久久久午夜视频| 欧美精品日韩综合在线| 欧美一区二区日韩一区二区| 久久亚洲一区二区| av成人免费观看| 欧美一级一区| 99精品免费网| 久久精品国产77777蜜臀| 日韩视频免费在线| 午夜欧美大尺度福利影院在线看| 亚洲国产精品一区二区久| 亚洲无线一线二线三线区别av| 在线观看日韩欧美| 亚洲午夜久久久久久久久电影院| 激情久久中文字幕| 中日韩美女免费视频网址在线观看| 韩国三级电影久久久久久| 亚洲免费播放| 亚洲第一网站| 亚洲一区制服诱惑| 日韩写真在线| 久久精品女人天堂| 亚洲欧美日韩一区二区在线| 老司机aⅴ在线精品导航| 欧美有码在线观看视频| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲第一在线综合在线| 国产欧美一二三区| 99精品热6080yy久久| 亚洲大胆人体在线| 香蕉久久精品日日躁夜夜躁| 中文在线一区| 麻豆久久婷婷| 久久影音先锋| 国产欧美日韩一区二区三区| 亚洲最新在线| 日韩视频久久|