国产探花免费观看_亚洲丰满少妇自慰呻吟_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.  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛山市| 土默特左旗| 乐安县| 和田市| 临颍县| 从江县| 安阳市| 毕节市| 光山县| 张家口市| 温宿县| 赤壁市| 蓝山县| 东乡县| 盖州市| 呼图壁县| 滁州市| 阿勒泰市| 独山县| 奈曼旗| 浦城县| 射洪县| 象州县| 沾益县| 海门市| 苏尼特左旗| 微山县| 津市市| 郴州市| 山阴县| 乃东县| 黑山县| 鄂托克前旗| 阜宁县| 台北市| 晋城| 深州市| 长沙县| 开封县| 扎囊县| 浦东新区|