zoukankan      html  css  js  c++  java
  • 设计模式C++描述----09.桥接(Bridge)模式

    一. 举例

    N年前:

    计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上。

    这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux。

    其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费。

    这时,无论出现新的系统,还是出现新的公司,对这种设计模式的修改都是很大的。

    N年后:

    Windows出现了,Linux出现了,软件和硬件终于分离了。这时的系统比如 Windows 既能在IBM机器上运行,也能在HP机器上运行了。

    这时软件专注于软件,硬件专注于硬件。这也是推动计算机系统不断发展的原因(更加专注了嘛),也是推动更多公司出现的原因(成本更低了嘛)。

    不管是出现了新硬件平台,还是出现新的OS,大家都能专注于自己领域。也就是外界的变化很大,但对这种模式冲击却很小。

    代码实现:

    1. //操作系统  
    2. class OS    
    3. {    
    4. public:    
    5.     virtual void Run() {}    
    6. };  
    7.   
    8. //Windows  
    9. class WindowOS: public OS    
    10. {  
    11. public:  
    12.     void Run() { cout<<"运行 Windows"<<endl; }     
    13. };  
    14.   
    15. //Linux  
    16. class LinuxOS: public OS    
    17. {  
    18. public:  
    19.     void Run() { cout<<"运行 Linux"<<endl; }     
    20. };  
    21.   
    22. //计算机  
    23. class Computer    
    24. {  
    25. public:  
    26.     virtual void InstallOS(OS *os) {}    
    27. };  
    28.   
    29. //IBM 计算机  
    30. class IBMComputer: public Computer    
    31. {  
    32. public:  
    33.     void InstallOS(OS *os) { os->Run(); }    
    34. };  
    35.   
    36. //HP 计算机  
    37. class HPComputer: public Computer    
    38. {  
    39. public:  
    40.     void InstallOS(OS *os) { os->Run(); }    
    41. };    
    42.   
    43.   
    44. int main()    
    45. {    
    46.     OS *os1 = new WindowOS();  
    47.     OS *os2 = new LinuxOS();  
    48.       
    49.     Computer *computer1 = new IBMComputer();  
    50.     computer1->InstallOS(os1);  
    51.     computer1->InstallOS(os2);  
    52.   
    53.     return 0;  
    54. }  

    二. 桥接模式

    定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

    换句话出,就是要把实现独立出来,让它们各自变化,而不会影响其它实现,这样可以降低耦合性。

    为什么叫Bridge 模式,从上图中可以看出,它像一座桥,桥两边的系统相对独立,左边是抽象部分,右边是实现部分。

    三. 组合、聚合复用原则


    由上面两个种结构图的对比,我们可以引出一个原则:尽量使用组合、聚合,尽量不要使用类继承。

  • 相关阅读:
    SQLite打开提示database disk image is malformed
    windows查看端口占用
    新浪SAE使用Thinkphp框架,禁用memcache节省豆子的方法
    Realtek 8168 安装 VMware ESXi 提示没有驱动
    13年国庆彩蛋
    Flex使用宋体渲染越南语显示错误
    微信 编码要UTF8
    WeiXin 验证成为开发者和更换服务器验证代码
    测试网络连通情况
    废弃sqlite代码,备查
  • 原文地址:https://www.cnblogs.com/any91/p/3247991.html
Copyright © 2011-2022 走看看