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

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

C++編程中使用設計模式中的policy策略模式的實例講解

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


   在看《C++設計新思維》的時候,發現在一開始就大篇幅的介紹策略模式(policy),策略模式不屬于經典設計模式中的一種,但是其實在我們日常的開發中是必不可少的。policy,策略,方針,這里的意思是指把復雜功能的類盡量的拆分為功能單一的簡單類的組合,簡單的類只負責單純行為或結構的某一方面。增加程序庫的彈性,可復用性,可擴展性。policy是一個虛擬的概念,他定義了某一類class的一些接口規范,并不與C++語法的關鍵字對應,只是一個抽象的概念。

實例1:

//policy模式的常見使用實例smartptr,template<  class T,  template <class> class CheckingPolicy,  template <class> class ThreadingModel>class SmartPtr  : public CheckingPolicy<T>  , public ThreadingModel<SmartPtr>{    T* operator->()  {   typename ThreadingModel<SmartPtr>::Lock guard(*this);   CheckingPolicy<T>::Check(pointee_);   return pointee_;  }private:  T* pointee_;};

實例2,比如說:我們定義一個policy,他是一個帶有參數T的一個模版,他必須有一個Create函數,且返回T類型指針。對于這個定義,我們可以有不同的實現,從而滿足不同用戶的不同的需求。

template <class T>struct OpNewCreator{  static T* Create()  {   return new T;  }};template <class T>struct MallocCreator{  static T* Create()  {   void* buf = std::malloc(sizeof(T));   if (!buf) return 0;   return new(buf) T;  }};template <class T>struct PrototypeCreator{  PrototypeCreator(T* pObj = 0)   :pPrototype_(pObj)  {}  T* Create()  {   return pPrototype_ ? pPrototype_->Clone() : 0;  }  T* GetPrototype() { return pPrototype_; }  void SetPrototype(T* pObj) { pPrototype_ = pObj; }private:  T* pPrototype_;};//test classclass Widget{};//調用方法一:template <class CreationPolicy>class WidgetManager : public CreationPolicy{  };void main(){typedef WidgetManager< OpNewCreator<Widget> > MyWidgetMgr;}//調用方法二:因為一般Manager是特定于某一類的class,所以在Manager中就指定要處理的class類型。template <template <class Created> class CreationPolicy>class WidgetManager : public CreationPolicy<Widget>{  };void main(){  // Application codetypedef WidgetManager<OpNewCreator> MyWidgetMgr;}

對于上面一個策略有3中不同的實現,從而就可以滿足不同的客戶的需求。
但是對于上面的使用,我們還可以有更好的修改:因為Policy的實現class一般會被繼承,所以我們要考慮他的析構,一般的我們使析構函數virtual,但是這里會影響template的靜態編譯特性,影響效率,所以我們使用protected或private的析構函數,既不影響繼承類對基類的析構,也不影響使用。
如修改如下:

template <class T>struct OpNewCreator{  static T* Create()  {  return new T;  }protected:  ~OpNewCreator() {}};

我們還可以修改上面的manger,實現creator policy的switch:

template <template <class> class CreationPolicy>class WidgetManager : public CreationPolicy<Widget>{   void SwitchPrototype(Widget* pNewPrototype)  {   CreationPolicy<Widget>& myPolicy = *this;   delete myPolicy.GetPrototype();   myPolicy.SetPrototype(pNewPrototype);  }};


policy 模式對我們創建可復用,可擴展的庫的開發有非常重要的作用,是OO的基本的設原則式之一。

總的說來策略模式:
優點:
1、 使用策略模式可以避免使用多重條件轉移語句。多重轉移語句不易維護。
2、 策略模式讓你可以動態的改變對象的行為,動態修改策略

缺點:
1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
2、類過多---策略模式造成很多的策略類,每個具體策略類都會產生一個新類。(這點可以通過享元模式來克服類過多)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区在线观看| 国产成人综合精品| 国产91九色视频| www日韩中文字幕在线看| 午夜精品在线视频| 久久久av电影| 亚洲丁香婷深爱综合| 亚洲成年人影院在线| 久久精品国产69国产精品亚洲| 欧美性色视频在线| 在线观看国产欧美| 日韩精品日韩在线观看| 久久精品青青大伊人av| 91理论片午午论夜理片久久| 国产欧美日韩中文字幕在线| 亚洲高清在线观看| 中文字幕综合一区| 亚洲激情电影中文字幕| 国产成人精品网站| 亚洲xxx视频| 91精品免费久久久久久久久| 国产成人精品一区二区三区| 日韩av综合网站| 中文字幕久久久| 日本亚洲精品在线观看| 91av视频在线播放| 日韩av免费网站| 日韩一中文字幕| 日本免费在线精品| 国产精品影片在线观看| 日韩av第一页| 亚洲老头同性xxxxx| 国产精品av网站| 久久久久久成人| 亚洲国产精品久久91精品| 欧美在线影院在线视频| 亚洲高清免费观看高清完整版| 色无极影院亚洲| 成人黄色网免费| 亚洲精品资源美女情侣酒店| 性亚洲最疯狂xxxx高清| 精品久久久久久亚洲精品| 欧美区在线播放| 中文字幕v亚洲ⅴv天堂| 国外成人在线视频| 日韩一区二区久久久| 亚洲国产精品热久久| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲美女免费精品视频在线观看| 精品无人区太爽高潮在线播放| 国产裸体写真av一区二区| 国产日韩欧美中文| 亚洲第一区中文99精品| 精品福利在线观看| 亚洲欧洲免费视频| 国产成人福利网站| 色哟哟亚洲精品一区二区| 亚洲综合社区网| 亚洲国产精彩中文乱码av| 91在线精品视频| 日韩精品久久久久| 精品性高朝久久久久久久| 日本不卡免费高清视频| 精品露脸国产偷人在视频| 国产噜噜噜噜噜久久久久久久久| 国产精品高清免费在线观看| 国产精品成人一区| 九九久久久久久久久激情| 欧美中文在线视频| 成人久久一区二区三区| 日韩黄在线观看| 欧美激情精品久久久| 欧美亚洲日本网站| 久久久久久久久久久亚洲| 欧洲亚洲女同hd| 国产精品黄色影片导航在线观看| 国外成人在线直播| 亚洲国产小视频| 日韩免费视频在线观看| 91日韩在线视频| 琪琪亚洲精品午夜在线| 亚洲免费av网址| 欧洲成人午夜免费大片| 韩国美女主播一区| 成人免费淫片aa视频免费| 国产精品久久久久久久久久东京| 欧美www在线| 国产噜噜噜噜噜久久久久久久久| 日韩在线欧美在线| 欧美小视频在线观看| 91在线观看免费高清完整版在线观看| 亚洲精品免费av| 国产精品a久久久久久| 在线看日韩av| 最近中文字幕日韩精品| 亚洲欧美在线播放| 91精品国产电影| 大胆人体色综合| 欧美裸体xxxx极品少妇| 久久久久久久久国产精品| 久久成人在线视频| 日韩中文字幕免费看| 久久久国产一区| 久久久久久久久久久亚洲| 狠狠躁天天躁日日躁欧美| 亚洲国产精品国自产拍av秋霞| 久久久亚洲福利精品午夜| 成人黄色av免费在线观看| 国产精品免费电影| 国产精品久久久av| 国产亚洲欧美日韩精品| 性欧美办公室18xxxxhd| 三级精品视频久久久久| 欧美精品性视频| 精品国产一区久久久| 精品福利在线观看| 成人啪啪免费看| 日韩一区视频在线| 欧美日韩国产一区在线| 亚洲福利视频网| 国产99久久精品一区二区 夜夜躁日日躁| 久久久久久久久亚洲| 成人黄色免费网站在线观看| 亚洲精品中文字幕有码专区| 久久99久久久久久久噜噜| 亚洲国产精品yw在线观看| 久久人人97超碰精品888| 另类少妇人与禽zozz0性伦| 国产精品 欧美在线| 日韩视频欧美视频| 国产精品影片在线观看| 日韩成人在线电影网| 久久久中文字幕| 91丝袜美腿美女视频网站| 久久九九全国免费精品观看| 欧美日韩激情视频| 亚洲free性xxxx护士hd| 91po在线观看91精品国产性色| 国内精品美女av在线播放| 国产午夜精品全部视频在线播放| 欧美一级片免费在线| 日本韩国在线不卡| 人人爽久久涩噜噜噜网站| 中文字幕一区二区三区电影| 成人亚洲欧美一区二区三区| 97久久精品国产| 国产精品成人一区| 久久精品国产亚洲7777| 国产一区二区三区精品久久久| 久久久久久久久久久免费| 91网站免费观看| 不卡av在线播放| 久久久久中文字幕2018| 精品久久久久久久久久久| 欧美久久精品一级黑人c片| 久久99久久99精品中文字幕| 亚洲国产精品久久久久久| 欧美肥婆姓交大片| 日本久久久久亚洲中字幕| 日韩av高清不卡| 精品国产拍在线观看| 欧美久久久精品| 亚洲欧美中文日韩在线v日本| 91福利视频在线观看|