亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++設計模式編程中Template Method模板方法模式的運用

2020-01-26 14:42:16
字體:
來源:轉載
供稿:網友

準備一個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然后聲明一些抽象方法來迫使子類實現剩余的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩余的邏輯有不同的實現。這就是模版方法模式的用意。

很多人可能沒有想到,模版方法模式實際上是所有模式中最為常見的幾個模式之一,而且很多人可能使用過模版方法模式而沒有意識到自己已經使用了這個模式。模版方法模式是基于繼承的代碼復用的基本技術,模版方法模式的結構和用法也是面向對象設計的核心。

模版方法模式需要開發抽象類和具體子類的設計師之間的協作。一個設計師負責給出一個算法的輪廓和骨架,另一些設計師則負責給出這個算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本法方法總匯起來的方法叫做模版方法(template method),這個設計模式的名字就是從此而來。

模版方法模式中的方法

模版方法中的方法可以分為兩大類:模版方法(Template Method)和基本方法(Primitive Method)。

模版方法

一個模版方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。這個模版方法一般會在抽象類中定義,并由子類不加以修改地完全繼承下來。

基本方法

基本方法又可以分為三種:抽象方法(Abstract Method)、具體方法(Concrete Method)和鉤子方法(Hook Method)。

  • 抽象方法:一個抽象方法由抽象類聲明,由具體子類實現。在C#語言里一個抽象方法以abstract關鍵字標示出來。
  • 具體方法:一個具體方法由抽象類聲明并實現,而子類并不實現或置換。在C#語言里面,一個具體方法沒有abstract關鍵字。
  • 鉤子方法:一個鉤子方法由抽象類聲明并實現,而子類會加以擴展。通常抽象類給出的實現是一個空實現,作為方法的默認實現。(Visual FoxPro中項目向導建立的項目會使用一個AppHook類實現監視項目成員變化,調整系統結構的工作。)鉤子方法的名字通常以do開始。


模板方法模式的實現

完整代碼示例(code):模板方法模式的實現很簡單,這里為了方便初學者的學習和參考,將給出完整的實現代碼(所有代碼采用 C++實現,并在 VC 6.0 下測試運行)。

代碼片斷 1:Template.h

//Template.h#ifndef _TEMPLATE_H_#define _TEMPLATE_H_class AbstractClass{  public:  virtual ~AbstractClass();  void TemplateMethod();  protected:  virtual void PrimitiveOperation1() = 0;  virtual void PrimitiveOperation2() = 0;  AbstractClass();  private:};class ConcreteClass1:public AbstractClass{  public:  ConcreteClass1();  ~ConcreteClass1();  protected:  void PrimitiveOperation1();  void PrimitiveOperation2();  private:};class ConcreteClass2:public AbstractClass{  public:   ConcreteClass2();  ~ConcreteClass2();  protected:  void PrimitiveOperation1();  void PrimitiveOperation2();  private:};#endif //~_TEMPLATE_H_

代碼片斷 2:Template.cpp

#include "Template.h"#include <iostream>using namespace std;AbstractClass::AbstractClass(){}AbstractClass::~AbstractClass(){}void AbstractClass::TemplateMethod(){   this->PrimitiveOperation1();  this->PrimitiveOperation2();}ConcreteClass1::ConcreteClass1(){}ConcreteClass1::~ConcreteClass1(){}void ConcreteClass1::PrimitiveOperation1(){  cout<<"ConcreteClass1...PrimitiveOperat  ion1"<<endl;}void ConcreteClass1::PrimitiveOperation2(){  cout<<"ConcreteClass1...PrimitiveOperat  ion2"<<endl;}ConcreteClass2::ConcreteClass2(){}ConcreteClass2::~ConcreteClass2(){}void ConcreteClass2::PrimitiveOperation1(){cout<<"ConcreteClass2...PrimitiveOperation1"<<endl;}void ConcreteClass2::PrimitiveOperation2(){  cout<<"ConcreteClass2...PrimitiveOperat  ion2"<<endl;}

代碼片斷 3:main.cpp

#include "Template.h"#include <iostream>using namespace std;int main(int argc,char* argv[]){  AbstractClass* p1 = new ConcreteClass1();  AbstractClass* p2 = new ConcreteClass2();  p1->TemplateMethod();  p2->TemplateMethod();  return 0;}

代碼說明:由于模板方法模式的實現代碼很簡單,因此解釋是多余的。其關鍵是將通用算法(邏輯)封裝起來,而將算法細節讓子類實現(多態)。

唯一注意的是我們將原語操作(細節算法)定義未保護(Protected)成員,只供模板方法調用(子類可以)。


適用場景
一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現。
各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復。這是O p d y k e 和J o h n s o n 所描述過的“重分解以一般化”的一個很好的例子[ O J 9 3 ]。首先識別現有代碼中的不同之處,并且將不同之處分離為新的操作。最后,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
控制子類擴展。模板方法只在特定點調用“h o o k ”操作(參見效果一節),這樣就只允許在這些點進行擴展。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美香蕉大胸在线视频观看| 亚洲国产欧美自拍| 精品久久久在线观看| 性色av一区二区三区| 91高清视频免费观看| 2019日本中文字幕| 日韩视频精品在线| 亚洲精品之草原avav久久| 欧美激情国产精品| 麻豆国产精品va在线观看不卡| 亚洲人成电影网站| 亚洲xxxx3d| 欧美黑人极品猛少妇色xxxxx| 亚洲国产成人精品久久久国产成人一区| 国产亚洲a∨片在线观看| 久久99视频免费| 亚洲国产精品人久久电影| 日韩在线视频中文字幕| 日韩在线视频国产| 欧美国产日本高清在线| 国产男女猛烈无遮挡91| 欧美国产亚洲精品久久久8v| 亚洲专区中文字幕| 亚洲欧美制服丝袜| 亚洲欧美日韩一区二区三区在线| 欧美日韩在线看| 亚洲品质视频自拍网| 日韩在线高清视频| 91高清免费在线观看| 麻豆精品精华液| 精品视频久久久久久久| 亚洲美女免费精品视频在线观看| 久久高清视频免费| 欧美成人中文字幕在线| 欧美性xxxxxx| 超碰精品一区二区三区乱码| 亚洲视频综合网| 国产精品久久久久影院日本| 成人免费网站在线看| 亚洲国产精品推荐| 久久久视频精品| 国产精品6699| 久久精品国产96久久久香蕉| 国产精品第8页| 欧美孕妇性xx| 中文欧美日本在线资源| 中文字幕欧美日韩在线| 亚洲精品狠狠操| 在线视频欧美日韩| 亚洲另类欧美自拍| 国产精品视频一| 亚洲自拍欧美另类| 97涩涩爰在线观看亚洲| 欧美高跟鞋交xxxxxhd| 亚洲性av在线| 亚洲福利在线播放| 92看片淫黄大片看国产片| 成人国产精品免费视频| 国产精品第100页| 色噜噜亚洲精品中文字幕| 欧美成人在线免费视频| 久久久久久久久爱| 亚洲免费电影在线观看| 91在线视频九色| 亚洲jizzjizz日本少妇| 韩国国内大量揄拍精品视频| 欧洲亚洲免费在线| 成人免费淫片aa视频免费| 日本精品免费观看| 欧美高清videos高潮hd| 午夜精品国产精品大乳美女| 国产精品观看在线亚洲人成网| 免费99精品国产自在在线| 日韩精品中文字| 欧美激情影音先锋| 亚洲精品久久7777777| 日韩在线视频网| 国产一级揄自揄精品视频| 欧美韩国理论所午夜片917电影| 这里只有精品在线观看| 精品在线小视频| 91po在线观看91精品国产性色| 亚洲欧美日韩中文在线制服| 成人免费视频a| 亚洲午夜未满十八勿入免费观看全集| 国产成人精品免高潮在线观看| 亚洲色图五月天| 精品国产91乱高清在线观看| 精品国产乱码久久久久酒店| 色播久久人人爽人人爽人人片视av| 亚洲综合在线播放| 91大神在线播放精品| 国产精品久久久久久久久久小说| 欧美电影在线观看| 国产精品午夜国产小视频| 中文字幕一区二区三区电影| 国产精品入口免费视频一| 中文字幕亚洲欧美在线| 亚洲精品电影在线观看| 国产精品91在线| 亚洲全黄一级网站| 国产97在线观看| 97久久久免费福利网址| 九九热r在线视频精品| 欧美另类高清videos| 日本国产高清不卡| 欧美日韩免费观看中文| 欧美精品免费在线| 亚洲欧美一区二区三区久久| 日日骚久久av| 毛片精品免费在线观看| 国产精品亚洲аv天堂网| 亚洲欧美国产另类| 国产欧美精品va在线观看| 在线观看欧美成人| 色yeye香蕉凹凸一区二区av| 亚洲精品资源美女情侣酒店| 免费av一区二区| 亚洲最大福利视频网| 久久精品人人做人人爽| 国产成人一区二区三区电影| 国产精品自在线| 18久久久久久| 中文字幕国产亚洲| 亚洲欧美日韩一区二区在线| 精品国产一区二区三区四区在线观看| 久久久久久九九九| 日本在线观看天堂男亚洲| 国产精品自产拍在线观看中文| 久久99国产综合精品女同| 亚洲欧洲成视频免费观看| 青青草原成人在线视频| 成人国产精品av| 欧美中文在线视频| 国产精品偷伦免费视频观看的| 欧美日本啪啪无遮挡网站| 91精品久久久久久久久久另类| 亚洲成人动漫在线播放| 欧美第一页在线| 欧美日韩在线第一页| 国产精品黄色影片导航在线观看| 最近2019中文字幕mv免费看| 亚洲系列中文字幕| 亚洲天堂av图片| 国产999精品久久久影片官网| 欧美人交a欧美精品| 亚洲电影在线观看| 日韩av成人在线观看| 国产一区二区三区高清在线观看| 夜夜嗨av色综合久久久综合网| 91亚洲精品久久久| 国产成人高清激情视频在线观看| 中文字幕国产精品| 最近2019中文字幕大全第二页| 日本免费久久高清视频| 亚洲肉体裸体xxxx137| www高清在线视频日韩欧美| 97成人在线视频| 久久久久久久久久久久久久久久久久av| 日韩av资源在线播放| 在线视频欧美日韩| 久久这里只有精品视频首页| 久久久www成人免费精品| 69视频在线免费观看|