国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

簡單了解設計模式中的裝飾者模式及C++版代碼實現

2020-05-23 14:08:18
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了簡單了解設計模式中的裝飾者模式及C++版代碼實現,ConcreteComponent的引用(指針)也可以達到修飾的功能,需要的朋友可以參考下

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

在 OO 設計和開發過程,可能會經常遇到以下的情況:我們需要為一個已經定義好的類添加新的職責(操作),通常的情況我們會給定義一個新類繼承自定義好的類,這樣會帶來一個問題(將在本模式的討論中給出)。通過繼承的方式解決這樣的情況還帶來了系統的復雜性,因為繼承的深度會變得很深。

而裝飾提供了一種給類增加職責的方法,不是通過繼承實現的,而是通過組合。

有關這些內容在討論中進一步闡述。

模式選擇

裝飾模式典型的結構圖為:

設計模式,裝飾者模式.C++

在 結 構 圖 中 , ConcreteComponent 和裝飾需 要 有 同 樣 的 接 口 , 因 此ConcreteComponent 和裝飾有著一個共同的父類。這里有人會問,讓裝飾直接維護一個指向 ConcreteComponent 引用(指針)不就可以達到同樣的效果,答案是肯定并且是否定的。肯定的是你可以通過這種方式實現,否定的是你不要用這種方式實現,因為通過這種方式你就只能為這個特定的 ConcreteComponent 提供修飾操作了,當有了一個新的ConcreteComponent 你 又 要 去 新 建 一 個裝飾來 實 現 。 但 是 通 過 結 構 圖 中 的ConcreteComponent 和裝飾有一個公共基類,就可以利用 OO 中多態的思想來實現只要是 Component 型別的對象都可以提供修飾操作的類,這種情況下你就算新建了 100 個Component 型別的類 ConcreteComponent,也都可以由裝飾一個類搞定。這也正是裝飾模式的關鍵和威力所在了。

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

實例

  1. #include 
  2.  
  3. using namespace std; 
  4.  
  5. class TestA 
  6.  
  7.  
  8. public
  9.  
  10. void display_a() 
  11.  
  12.  
  13. cout<<"display a..."
  14.  
  15.  
  16. }; 
  17.  
  18. class TestB 
  19.  
  20.  
  21. public
  22.  
  23. void display_b() 
  24.  
  25.  
  26. cout<<"display b..."
  27.  
  28.  
  29. }; 
  30.  
  31. class Facade 
  32.  
  33.  
  34. TestA *testa; 
  35.  
  36. TestB *testb; 
  37.  
  38. public
  39.  
  40. Facade() 
  41.  
  42.  
  43. testa = new TestA(); 
  44.  
  45. testb = new TestB(); 
  46.  
  47.  
  48. ~Facade() 
  49.  
  50.  
  51. delete testa; 
  52.  
  53. delete testb; 
  54.  
  55.  
  56. void MethodA() 
  57.  
  58.  
  59. testa->display_a(); 
  60.  
  61. testb->display_b(); 
  62.  
  63.  
  64. }; 
  65.  
  66. int main() 
  67.  
  68.  
  69. Facade *facade = new Facade(); 
  70.  
  71. facade->MethodA(); 
  72.  
  73. system("pause"); 
  74.  
  75. return 0; 
  76.  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额济纳旗| 苍溪县| 本溪市| 保德县| 读书| 略阳县| 黔西县| 东兴市| 广昌县| 晋宁县| 广东省| 上高县| 兴山县| 夏津县| 九江市| 洛川县| 沁水县| 互助| 黄龙县| 绥中县| 康平县| 台北市| 冕宁县| 鲁山县| 林州市| 当雄县| 焦作市| 原平市| 定日县| 宝坻区| 库伦旗| 东方市| 玉田县| 南木林县| 蒲城县| 金寨县| 万年县| 景宁| 高雄县| 土默特右旗| 丹巴县|