程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式C++描述----09.橋接(Bridge)模式

設計模式C++描述----09.橋接(Bridge)模式

編輯:C++入門知識

一. 舉例

N年前:


計算機最先出來時,軟件和硬件是一綁在一起的,比如IBM出了一台電腦,上面有一個定制的系統,假如叫 IBM_Win,這個IBM_Win系統當然不能在HP電腦上運行,同樣HP出的HP_Win系統也不能運行在IBM上。

 \

這時如果有一家新公司Apple出了一台新電腦,那麼這個公司也要開發自己的系統 Apple_Win,Apple_Linux。

其實,上面幾家公司開發的軟件和硬件在很多地方都有相似之處,如果每家公司都做自己的系統,這意味著資源和人員的極大浪費。

這時,無論出現新的系統,還是出現新的公司,對這種設計模式的修改都是很大的。


N年後:

Windows出現了,Linux出現了,軟件和硬件終於分離了。這時的系統比如 Windows 既能在IBM機器上運行,也能在HP機器上運行了。

 \


這時軟件專注於軟件,硬件專注於硬件。這也是推動計算機系統不斷發展的原因(更加專注了嘛),也是推動更多公司出現的原因(成本更低了嘛)。

不管是出現了新硬件平台,還是出現新的OS,大家都能專注於自己領域。也就是外界的變化很大,但對這種模式沖擊卻很小。

代碼實現:


[cpp] //操作系統  
class OS   
{   
public:   
    virtual void Run() {}   
}; 
 
//Windows  
class WindowOS: public OS   

public: 
    void Run() { cout<<"運行 Windows"<<endl; }    
}; 
 
//Linux  
class LinuxOS: public OS   

public: 
    void Run() { cout<<"運行 Linux"<<endl; }    
}; 
 
//計算機  
class Computer   

public: 
    virtual void InstallOS(OS *os) {}   
}; 
 
//IBM 計算機  
class IBMComputer: public Computer   

public: 
    void InstallOS(OS *os) { os->Run(); }   
}; 
 
//HP 計算機  
class HPComputer: public Computer   

public: 
    void InstallOS(OS *os) { os->Run(); }   
};   
 
 
int main()   
{   
    OS *os1 = new WindowOS(); 
    OS *os2 = new LinuxOS(); 
     
    Computer *computer1 = new IBMComputer(); 
    computer1->InstallOS(os1); 
    computer1->InstallOS(os2); 
 
    return 0; 

//操作系統
class OS 

public: 
    virtual void Run() {} 
};

//Windows
class WindowOS: public OS 
{
public:
    void Run() { cout<<"運行 Windows"<<endl; }  
};

//Linux
class LinuxOS: public OS 
{
public:
    void Run() { cout<<"運行 Linux"<<endl; }  
};

//計算機
class Computer 
{
public:
    virtual void InstallOS(OS *os) {} 
};

//IBM 計算機
class IBMComputer: public Computer 
{
public:
    void InstallOS(OS *os) { os->Run(); } 
};

//HP 計算機
class HPComputer: public Computer 
{
public:
    void InstallOS(OS *os) { os->Run(); } 
}; 


int main() 

    OS *os1 = new WindowOS();
    OS *os2 = new LinuxOS();
   
    Computer *computer1 = new IBMComputer();
    computer1->InstallOS(os1);
    computer1->InstallOS(os2);

    return 0;
}

二. 橋接模式


定義:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

換句話出,就是要把實現獨立出來,讓它們各自變化,而不會影響其它實現,這樣可以降低耦合性。

為什麼叫Bridge 模式,從上圖中可以看出,它像一座橋,橋兩邊的系統相對獨立,左邊是抽象部分,右邊是實現部分。

三. 組合、聚合復用原則

 
\

 \


由上面兩個種結構圖的對比,我們可以引出一個原則:盡量使用組合、聚合,盡量不要使用類繼承。

 


作者 lwbeyond

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved