設計模式C++實現(10)——橋接模式

分類: 軟件設計模式c++實現 14人閱讀 評論(0) 收藏 舉報
 軟件領域中的設計模式爲開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態,真正領悟設計模式的精髓是可能一個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式:可複用面向對象軟件的基礎》兩本書。本文介紹橋接模式的實現。

       [DP]書上定義:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。考慮裝操作系統,有多種配置的計算機,同樣也有多款操作系統。如何運用橋接模式呢?可以將操作系統和計算機分別抽象出來,讓它們各自發展,減少它們的耦合度。當然了,兩者之間有標準的接口。這樣設計,不論是對於計算機,還是操作系統都是非常有利的。下面給出這種設計的UML圖,其實就是橋接模式的UML圖。

         給出C++的一種實現:

  1. //操作系統   
  2. class OS  
  3. {  
  4. public:  
  5.     virtual void InstallOS_Imp() {}  
  6. };  
  7. class WindowOS: public OS  
  8. {  
  9. public:  
  10.     void InstallOS_Imp() { cout<<"安裝Window操作系統"<<endl; }   
  11. };  
  12. class LinuxOS: public OS  
  13. {  
  14. public:  
  15.     void InstallOS_Imp() { cout<<"安裝Linux操作系統"<<endl; }   
  16. };  
  17. class UnixOS: public OS  
  18. {  
  19. public:  
  20.     void InstallOS_Imp() { cout<<"安裝Unix操作系統"<<endl; }   
  21. };  
  22. //計算機   
  23. class Computer  
  24. {  
  25. public:  
  26.     virtual void InstallOS(OS *os) {}  
  27. };  
  28. class DellComputer: public Computer  
  29. {  
  30. public:  
  31.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  32. };  
  33. class AppleComputer: public Computer  
  34. {  
  35. public:  
  36.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  37. };  
  38. class HPComputer: public Computer  
  39. {  
  40. public:  
  41.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  42. };  
  1. //操作系統  
  2. class OS  
  3. {  
  4. public:  
  5.     virtual void InstallOS_Imp() {}  
  6. };  
  7. class WindowOS: public OS  
  8. {  
  9. public:  
  10.     void InstallOS_Imp() { cout<<"安裝Window操作系統"<<endl; }   
  11. };  
  12. class LinuxOS: public OS  
  13. {  
  14. public:  
  15.     void InstallOS_Imp() { cout<<"安裝Linux操作系統"<<endl; }   
  16. };  
  17. class UnixOS: public OS  
  18. {  
  19. public:  
  20.     void InstallOS_Imp() { cout<<"安裝Unix操作系統"<<endl; }   
  21. };  
  22. //計算機  
  23. class Computer  
  24. {  
  25. public:  
  26.     virtual void InstallOS(OS *os) {}  
  27. };  
  28. class DellComputer: public Computer  
  29. {  
  30. public:  
  31.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  32. };  
  33. class AppleComputer: public Computer  
  34. {  
  35. public:  
  36.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  37. };  
  38. class HPComputer: public Computer  
  39. {  
  40. public:  
  41.     void InstallOS(OS *os) { os->InstallOS_Imp(); }  
  42. };  

        客戶使用方式:

  1. int main()  
  2. {  
  3.     OS *os1 = new WindowOS();  
  4.     OS *os2 = new LinuxOS();  
  5.     Computer *computer1 = new AppleComputer();  
  6.     computer1->InstallOS(os1);  
  7.     computer1->InstallOS(os2);  
  8. }  
  1. int main()  
  2. {  
  3.     OS *os1 = new WindowOS();  
  4.     OS *os2 = new LinuxOS();  
  5.     Computer *computer1 = new AppleComputer();  
  6.     computer1->InstallOS(os1);  
  7.     computer1->InstallOS(os2);  
  8. }  

       本人享有博客文章的版權,轉載請標明出處 http://blog.csdn.net/wuzhekai1985


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章