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

設計模式之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>
            久久爱另类一区二区小说| 伊人一区二区三区久久精品| 很黄很黄激情成人| 久久国产精品久久久久久久久久| 亚洲欧美综合v| 国产亚洲精品久久飘花| 另类亚洲自拍| 欧美精品www| 亚洲视频免费观看| 亚洲欧美日韩国产综合| 在线观看欧美一区| 亚洲日本理论电影| 国产精品久久夜| 久久久综合视频| 欧美韩日精品| 欧美一级大片在线免费观看| 久久久人人人| 国产精品99久久久久久www| 亚洲欧美日本国产专区一区| 欲香欲色天天天综合和网| 亚洲人www| 国产女人精品视频| 欧美激情第二页| 国产乱码精品一区二区三区忘忧草 | 欧美日韩国产成人在线免费| 午夜精品福利电影| 久热这里只精品99re8久| 亚洲视频一起| 久久性色av| 小处雏高清一区二区三区| 欧美jizz19性欧美| 欧美伊人久久久久久久久影院| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜精品久久久99热福利| 欧美成人精品在线视频| 欧美一区免费| 欧美午夜精品伦理| 亚洲欧洲精品一区二区精品久久久 | 亚洲国产高潮在线观看| 国产日韩精品在线| 亚洲免费电影在线观看| 曰本成人黄色| 久久精品国产2020观看福利| 亚洲香蕉成视频在线观看| 久久深夜福利免费观看| 欧美一区二区三区电影在线观看| 欧美精选在线| 欧美激情一区二区三区四区| 国产亚洲视频在线| 亚洲一区中文字幕在线观看| 亚洲私人影吧| 欧美极品一区| 亚洲欧洲日韩女同| 日韩视频一区二区三区在线播放| 久久久久久精| 国产精品系列在线| 一本色道久久综合亚洲精品不卡| 亚洲三级毛片| 欧美aⅴ一区二区三区视频| 久久中文欧美| 亚洲高清成人| 免费日韩一区二区| 亚洲国产精品久久人人爱蜜臀| 国内精品久久久久久久果冻传媒 | 亚洲欧美激情精品一区二区| 亚洲一区免费视频| 欧美三级视频在线| 一区二区三区回区在观看免费视频| 夜夜嗨一区二区| 欧美精品系列| 99国产精品久久| 小黄鸭视频精品导航| 国产乱理伦片在线观看夜一区| 午夜精品美女久久久久av福利| 久久久久久自在自线| 韩国v欧美v日本v亚洲v| 美女999久久久精品视频| 亚洲第一级黄色片| 一区二区三区四区精品| 欧美日韩一区二区三区在线视频 | 久久综合色婷婷| 亚洲经典一区| 欧美天天影院| 午夜精品福利一区二区蜜股av| 久久综合色婷婷| 9人人澡人人爽人人精品| 国产精品高潮粉嫩av| 亚洲欧美综合精品久久成人| 久久综合狠狠综合久久综合88| 亚洲电影免费在线| 欧美日韩综合在线| 欧美一区三区三区高中清蜜桃| 欧美大学生性色视频| 亚洲深夜影院| 一区二区三区在线看| 欧美精品一区二区蜜臀亚洲| 亚洲无玛一区| 欧美国产综合| 欧美亚洲网站| 亚洲精品免费网站| 国产美女精品| 欧美激情一级片一区二区| 亚洲一区二区三区精品在线观看| 免费欧美电影| 午夜视频一区在线观看| 亚洲人成网站777色婷婷| 国产精品一区二区欧美| 欧美成人免费网| 午夜亚洲性色视频| 日韩午夜三级在线| 久久资源av| 性色av一区二区三区红粉影视| 亚洲精品美女91| 精品91久久久久| 国产精品免费小视频| 欧美高清成人| 久久久久久久欧美精品| 亚洲一区高清| 一片黄亚洲嫩模| 最新成人在线| 欧美大片网址| 久久伊人一区二区| 久久国产主播| 欧美一区二区福利在线| 9人人澡人人爽人人精品| 亚洲国产精品久久久久婷婷884 | 亚洲国产一区二区三区在线播| 久久久久se| 久久国产精品72免费观看| 亚洲一区二区在线| 宅男噜噜噜66一区二区| 亚洲美女视频网| 亚洲精品欧洲| 亚洲精品小视频| 亚洲欧洲一区二区三区久久| 在线看片成人| 亚洲国产欧美在线人成| 亚洲电影激情视频网站| 亚洲大胆女人| 亚洲国产成人在线| 亚洲国产91| 亚洲精品国产精品国自产观看| 亚洲国产成人91精品 | 欧美激情影音先锋| 欧美精品一区二区三区久久久竹菊 | 亚洲永久精品大片| 亚洲欧美激情诱惑| 香蕉久久夜色精品国产使用方法| 亚洲免费在线观看| 欧美一激情一区二区三区| 久久精品毛片| 欧美/亚洲一区| 欧美电影专区| 亚洲美女啪啪| 亚洲在线第一页| 久久av一区| 蜜桃av噜噜一区| 欧美日韩p片| 国产精品美女在线| 国产在线国偷精品产拍免费yy| 国语自产精品视频在线看8查询8| 在线成人激情黄色| 一本久久a久久精品亚洲| 亚洲一区国产精品| 久久久久久久999精品视频| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国产女人aaa毛片在线| 99一区二区| 久久精品免费| 欧美日韩国产一区| 国产在线不卡精品| 日韩网站在线| 久久国产精品第一页| 欧美国产精品中文字幕| av成人天堂| 久久嫩草精品久久久精品| 欧美视频二区36p| 欲色影视综合吧| 亚洲综合色网站| 麻豆久久婷婷| 亚洲婷婷在线| 美日韩精品视频| 国产精品一区在线播放| 亚洲三级电影在线观看| 久久av一区二区三区漫画| 亚洲激情影视| 久久精品一本久久99精品| 欧美色图五月天| 91久久在线播放| 久久精品夜色噜噜亚洲aⅴ| 最近中文字幕日韩精品| 欧美在线视频一区| 国产精品久久| 日韩视频三区| 欧美电影在线播放| 欧美一区二区三区精品电影| 欧美午夜视频在线| 亚洲精品亚洲人成人网| 奶水喷射视频一区| 欧美在线观看视频在线|