最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單了解設(shè)計(jì)模式中的裝飾者模式及C++版代碼實(shí)現(xiàn)

 更新時(shí)間:2016年03月09日 10:36:13   投稿:goldensun  
這篇文章主要介紹了簡(jiǎn)單了解設(shè)計(jì)模式中的裝飾者模式及C++版代碼實(shí)現(xiàn),ConcreteComponent的引用(指針)也可以達(dá)到修飾的功能,需要的朋友可以參考下

由遇到的問題引出的裝飾模式

在 OO 設(shè)計(jì)和開發(fā)過程,可能會(huì)經(jīng)常遇到以下的情況:我們需要為一個(gè)已經(jīng)定義好的類添加新的職責(zé)(操作),通常的情況我們會(huì)給定義一個(gè)新類繼承自定義好的類,這樣會(huì)帶來一個(gè)問題(將在本模式的討論中給出)。通過繼承的方式解決這樣的情況還帶來了系統(tǒng)的復(fù)雜性,因?yàn)槔^承的深度會(huì)變得很深。

而裝飾提供了一種給類增加職責(zé)的方法,不是通過繼承實(shí)現(xiàn)的,而是通過組合。

有關(guān)這些內(nèi)容在討論中進(jìn)一步闡述。
模式選擇
裝飾模式典型的結(jié)構(gòu)圖為:

201639103245900.jpg (557×364)

在 結(jié) 構(gòu) 圖 中 , ConcreteComponent 和裝飾需 要 有 同 樣 的 接 口 , 因 此ConcreteComponent 和裝飾有著一個(gè)共同的父類。這里有人會(huì)問,讓裝飾直接維護(hù)一個(gè)指向 ConcreteComponent 引用(指針)不就可以達(dá)到同樣的效果,答案是肯定并且是否定的??隙ǖ氖悄憧梢酝ㄟ^這種方式實(shí)現(xiàn),否定的是你不要用這種方式實(shí)現(xiàn),因?yàn)橥ㄟ^這種方式你就只能為這個(gè)特定的 ConcreteComponent 提供修飾操作了,當(dāng)有了一個(gè)新的ConcreteComponent 你 又 要 去 新 建 一 個(gè)裝飾來 實(shí) 現(xiàn) 。 但 是 通 過 結(jié) 構(gòu) 圖 中 的ConcreteComponent 和裝飾有一個(gè)公共基類,就可以利用 OO 中多態(tài)的思想來實(shí)現(xiàn)只要是 Component 型別的對(duì)象都可以提供修飾操作的類,這種情況下你就算新建了 100 個(gè)Component 型別的類 ConcreteComponent,也都可以由裝飾一個(gè)類搞定。這也正是裝飾模式的關(guān)鍵和威力所在了。

當(dāng)然如果你只用給 Component 型別類添加一種修飾,則裝飾這個(gè)基類就不是很必要了。

實(shí)例

#include <iostream> 
using namespace std; 
 
class TestA 
{ 
public: 
  void display_a() 
  { 
    cout<<"display a..."<<endl; 
  } 
}; 
 
class TestB 
{ 
public: 
  void display_b() 
  { 
    cout<<"display b..."<<endl; 
  } 
}; 
 
class Facade 
{ 
  TestA *testa; 
  TestB *testb; 
 
public: 
  Facade() 
  { 
    testa = new TestA(); 
    testb = new TestB(); 
  } 
  ~Facade() 
  { 
    delete testa; 
    delete testb; 
  } 
 
  void MethodA() 
  { 
    testa->display_a(); 
    testb->display_b(); 
  } 
}; 
 
int main() 
{ 
  Facade *facade = new Facade(); 
   
  facade->MethodA(); 
 
  system("pause"); 
  return 0; 
} 

相關(guān)文章

  • 使用C++的inipp庫處理配置文件.ini的示例詳解

    使用C++的inipp庫處理配置文件.ini的示例詳解

    一個(gè)ini文件由多個(gè)節(jié)section組成,每個(gè)節(jié)由多個(gè)鍵值對(duì)組成,本文給大家介紹了使用第三方庫inipp來操作ini文件,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • c語言static關(guān)鍵字用法詳解

    c語言static關(guān)鍵字用法詳解

    大家好,本篇文章主要講的是c語言static關(guān)鍵字用法詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • c++ map索引不存在的key可能導(dǎo)致的后果分析

    c++ map索引不存在的key可能導(dǎo)致的后果分析

    這篇文章主要介紹了c++ map索引不存在的key可能導(dǎo)致的后果分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C語言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解

    C語言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解

    下面小編就為大家?guī)硪黄狢語言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解。小編覺得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言通過三種方法實(shí)現(xiàn)屬于你的通訊錄

    C語言通過三種方法實(shí)現(xiàn)屬于你的通訊錄

    本文將實(shí)現(xiàn)一個(gè)通訊錄,來實(shí)現(xiàn)人員的增刪插改功能。文中通過三種形式來實(shí)現(xiàn)用戶的增刪插改,其實(shí)也就是一點(diǎn)點(diǎn)的優(yōu)化版本,從靜態(tài)的實(shí)現(xiàn),到動(dòng)態(tài)的實(shí)現(xiàn),最后以文件的形式來完成,請(qǐng)大家和我一起往下看吧
    2022-11-11
  • 詳解如何利用C++實(shí)現(xiàn)一個(gè)反射類

    詳解如何利用C++實(shí)現(xiàn)一個(gè)反射類

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一個(gè)反射類,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • 一文詳解C++11中auto的使用

    一文詳解C++11中auto的使用

    這篇文章主要為大家分享一下C++11中auto關(guān)鍵字的使用示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2023-07-07
  • 詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    這篇文章主要介紹了C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • QT與MATLAB混合編程的詳細(xì)教程

    QT與MATLAB混合編程的詳細(xì)教程

    最近項(xiàng)目需要,matlab的一些算法需要工程用,因此需要直接轉(zhuǎn)成Qt能夠調(diào)用的形式,下面這篇文章主要給大家介紹了關(guān)于QT與MATLAB混合編程的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C語言編程入門必背的示例代碼整理大全

    C語言編程入門必背的示例代碼整理大全

    這篇文章主要為大家整理并介紹了C語言編程必背的示例代碼大全,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11

最新評(píng)論

临安市| 于都县| 镶黄旗| 绥江县| 永安市| 内丘县| 外汇| 南阳市| 塘沽区| 平原县| 黄龙县| 吉林省| 通道| 宁晋县| 镇康县| 丹棱县| 镇远县| 夏津县| 静安区| 阿坝| 封开县| 临湘市| 砀山县| 泰宁县| 南投县| 巴东县| 永泰县| 恭城| 青神县| 屏东市| 扎兰屯市| 辉县市| 渝北区| 祥云县| 满城县| 中卫市| 双牌县| 获嘉县| 乐业县| 汪清县| 诸城市|