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

設計模式之template method模式

算法意圖:

將算法骨架定義在父類當中,具體的實現放到子類當中。Template method可以不改變算法的骨架在子類中重新定義算法中的某些特定的步驟。

算法適用性:

1.       一次性將算法的不變部分封裝到父類當中,將可變的部分放到子類中去實現。

2.       各子類的公共部分亞冠提取出來放到父類當中,避免代碼重復,分離變化和不變的地方。

3.       通過hook來控制子類的擴展。

4.       模板方法的格式:
class TemplateMethod_Demo
{
  public:
    <返回值類型> <模板方法名>(<參數列表>); //模板方法成員函數,定義為公有的非虛成員函數,供客戶調用;
  protected:
    virtual <返回值類型> <抽象操作的方法名>(<參數列表>) = 0;//抽象操作(可選),:原語操作,用純虛函數表示,必須被重定義,定義為保護類型的,只能被模板方法本身調用;
    virtual <返回值類型> <鉤子操作的方法名>(<參數列表>){};  //鉤子操作(必選),:原語操作,用虛函數表示,可被重定義,提供缺省實現,定義為保護類型的,只能被模板方法本身調用;
};

 

  1// template.cpp : 定義控制臺應用程序的入口點。
  2//
  3
  4#include "stdafx.h"
  5#include<iostream>
  6using namespace std;
  7
  8class AbstractClass
  9{
 10public:
 11     AbstractClass(){}
 12     virtual ~AbstractClass(){}
 13     virtual void doFirst();
 14     virtual void doAfter();
 15     // 這個函數中定義了算法的輪廓
 16     void TemplateMethod()
 17     {
 18         doFirst();
 19         PrimitiveOperation1();
 20         PrimitiveOperation2();
 21          if (b_jugle) 
 22          {
 23              doSthElse();
 24          }
 
 25         doAfter();
 26     }

 27     virtual void setHookTrue()
 28     {
 29         AbstractClass::b_jugle = true;
 30     }
;
 31
 32protected:
 33     // 純虛函數,由派生類實現之
 34     virtual void PrimitiveOperation1() = 0;
 35     virtual void PrimitiveOperation2() = 0;
 36     virtual void  doSthElse() = 0;
 37     static bool b_jugle;
 38     
 39     
 40}
;
 41
 42bool AbstractClass::b_jugle = false;
 43
 44
 45void AbstractClass::doFirst()
 46{
 47    cout<<"do std before"<<endl;
 48}

 49
 50void AbstractClass::doAfter()
 51{
 52    cout<<"do std after"<<endl;
 53}

 54
 55// 繼承自AbstractClass,實現算法
 56class ConcreateClass: public AbstractClass
 57{
 58public:
 59     ConcreateClass(){}
 60     virtual ~ConcreateClass(){}
 61
 62protected:
 63     virtual void PrimitiveOperation1()
 64     {
 65         cout << "PrimitiveOperation1 by ConcreateClass\n";
 66     }

 67     virtual void PrimitiveOperation2()
 68     {
 69         cout << "PrimitiveOperation2 by ConcreateClass\n";
 70     }

 71     virtual void doSthElse()
 72     {
 73         cout<<"so something else!\n"<<endl;
 74     }

 75}
;
 76
 77
 78// 繼承自AbstractClass,實現算法
 79class ConcreateClassNew: public AbstractClass
 80{
 81public:
 82     ConcreateClassNew(){}
 83     virtual ~ConcreateClassNew(){}
 84    
 85protected:
 86     virtual void PrimitiveOperation1()
 87     {
 88         cout << "PrimitiveOperation1 by ConcreateClassNew\n";
 89     }

 90     virtual void PrimitiveOperation2()
 91     {
 92         cout << "PrimitiveOperation2 by ConcreateClassNew\n";
 93     }

 94      virtual void doSthElse()
 95     {
 96         cout<<"so something else!\n"<<endl;
 97     }

 98    
 99}
;
100
101
102int _tmain(int argc, _TCHAR* argv[])
103{
104    AbstractClass* pConcreateClass = new ConcreateClass;
105    pConcreateClass->TemplateMethod();
106    delete pConcreateClass;
107
108
109    AbstractClass* pConcreateClass2 = new ConcreateClassNew;
110    pConcreateClass2->setHookTrue();
111    pConcreateClass2->TemplateMethod();
112    delete pConcreateClass2;
113    return 0;
114}

115
116

運行結果:


template method的設計原則:
1.封裝變化部分;
2.對接口編程
3. 好萊塢原則:別調用我們,在我們需要時會調用你

最后談一下和策略模式的區別,最主要的區別是一個是使用繼承而策略模式是使用組合方式。

posted on 2012-04-29 11:18 sheng 閱讀(395) 評論(0)  編輯 收藏 引用

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿(1)

隨筆檔案

收藏夾

同行

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品福利在线观看| 欧美日韩岛国| 国产综合视频| 久久久久久亚洲综合影院红桃| 欧美在线观看视频一区二区三区| 国产一区二区三区在线观看视频 | 一区二区三区日韩欧美| 亚洲欧洲视频| 欧美视频中文在线看| 欧美一级大片在线观看| 久久久国产视频91| 亚洲看片免费| 午夜精品久久久久久久久| 激情偷拍久久| 亚洲片在线资源| 国产精品日日摸夜夜摸av| 久热精品视频在线观看一区| 久久嫩草精品久久久精品一| 日韩午夜电影av| 亚洲欧美在线aaa| 亚洲国产视频直播| 亚洲一区二区在线播放| 亚洲大胆人体视频| 中文久久精品| 亚洲日本欧美天堂| 亚洲尤物在线| 日韩午夜电影av| 亚洲天堂av高清| 久久综合伊人77777| 亚洲日本欧美天堂| 亚洲欧美电影院| 亚洲高清视频一区| 亚洲小说区图片区| 亚洲精品一区二区三区在线观看| 亚洲一区二区三区色| 亚洲激情综合| 欧美在线精品免播放器视频| 亚洲最黄网站| 久久久噜噜噜久久久| 亚洲在线观看免费| 欧美成人午夜77777| 欧美亚州一区二区三区| 欧美高清在线| 国产亚洲永久域名| 一区二区三区色| 日韩一级片网址| 久久综合伊人77777| 久久精品导航| 国产精品成人久久久久| 91久久精品国产91性色tv| 国产丝袜一区二区三区| 亚洲私人黄色宅男| 亚洲天堂av在线免费观看| 欧美大片国产精品| 欧美国产精品v| 欲色影视综合吧| 久久激五月天综合精品| 久久国产精品亚洲va麻豆| 国产精品国产三级国产专播品爱网 | 午夜精品在线| 欧美日韩直播| 亚洲人成在线观看一区二区| 亚洲精品韩国| 欧美黄色影院| 亚洲国产另类久久久精品极度| 怡红院av一区二区三区| 欧美专区在线观看一区| 久久国产日韩欧美| 国产亚洲精久久久久久| 性色av一区二区三区| 久久av老司机精品网站导航| 国产欧美日韩综合| 久久成人免费电影| 美女图片一区二区| 最新成人在线| 欧美日韩国产高清视频| 在线视频欧美一区| 亚洲欧美在线免费| 国产欧美亚洲一区| 久久精品国产视频| 欧美v日韩v国产v| 亚洲美女视频在线观看| 欧美视频一区二区三区…| 一本色道久久88亚洲综合88| 亚洲日韩视频| 欧美体内she精视频| 日韩一级在线观看| 亚洲亚洲精品三区日韩精品在线视频 | 国产精品免费小视频| 99国产精品久久久久久久| 小嫩嫩精品导航| 国产亚洲精品v| 免费在线亚洲欧美| 一本色道精品久久一区二区三区| 久久高清国产| 最新国产成人在线观看| 国产精品久久久久高潮| 久久久久久香蕉网| 一区二区三区视频在线看| 蜜桃久久av| 日韩午夜电影在线观看| 欧美国产精品日韩| 狠狠色狠狠色综合| 欧美日韩123| 午夜久久一区| 亚洲国产精品综合| 欧美在线免费视频| 亚洲精品字幕| 激情久久综艺| 国产精品99一区二区| 久久午夜影视| 午夜精品久久久久| 日韩西西人体444www| 牛牛精品成人免费视频| 亚洲一区亚洲| 日韩亚洲视频| 亚洲高清久久久| 国产精品中文在线| 欧美人在线观看| 蜜臀av一级做a爰片久久| 欧美在线亚洲| 亚洲一区一卡| 一区二区久久久久| 亚洲激情一区二区三区| 欧美1区2区| 另类图片综合电影| 久久久五月婷婷| 欧美在线观看你懂的| 亚洲在线中文字幕| 中文日韩欧美| 在线综合欧美| 国产精品入口| 久久伊人亚洲| 欧美综合激情网| 性伦欧美刺激片在线观看| 亚洲视频中文字幕| 99精品欧美一区二区三区| 亚洲欧洲日产国码二区| 亚洲国产精品久久精品怡红院| 久久最新视频| 欧美不卡福利| 欧美成年人网站| 女人天堂亚洲aⅴ在线观看| 久久亚洲色图| 久久久久久久激情视频| 久久久成人网| 久久一区二区三区国产精品| 久久婷婷成人综合色| 久久亚洲国产精品一区二区| 另类激情亚洲| 亚洲国产毛片完整版| 91久久黄色| 亚洲深夜福利视频| 午夜伦理片一区| 久久久精品欧美丰满| 欧美凹凸一区二区三区视频| 欧美福利小视频| 欧美视频你懂的| 国产伦精品一区二区三区免费 | 欧美日韩国产小视频| 欧美肉体xxxx裸体137大胆| 国产精品久久久久永久免费观看| 国产精品一区一区三区| 激情一区二区| 夜夜狂射影院欧美极品| 亚洲欧美日韩一区二区| 久久亚洲综合色| 亚洲国产一区二区三区高清 | 亚洲国产日韩精品| 一二三区精品福利视频| 久久国产天堂福利天堂| 欧美成人日韩| 中文久久精品| 欧美一区二区三区在线看| 久久美女性网| 99在线观看免费视频精品观看| 欧美一级日韩一级| 欧美成人中文字幕| 国产日韩欧美在线播放| 亚洲伦伦在线| 久久嫩草精品久久久精品一| 91久久国产精品91久久性色| 欧美亚洲免费电影| 欧美日本中文| 极品中文字幕一区| 午夜日韩在线| 91久久香蕉国产日韩欧美9色 | 乱码第一页成人| 亚洲视频第一页| 牛牛精品成人免费视频| 国产精品色婷婷| 日韩视频在线一区二区三区| 久久看片网站| 亚洲欧美成人一区二区三区| 欧美精品 日韩| 亚洲国产精品va| 久久精品99国产精品| 99精品欧美一区二区三区综合在线| 久久久91精品国产| 国产亚洲欧美一区二区|