一. 舉例
N年前:
電腦最先出來時,軟體和硬體是一綁在一起的,比如IBM出了一台電腦,上面有一個定製的系統,假如叫 IBM_Win,這個IBM_Win系統當然不能在HP電腦上運行,同樣HP出的HP_Win系統也不能運行在IBM上。
這時如果有一家新公司Apple出了一台新電腦,那麼這個公司也要開發自己的系統 Apple_Win,Apple_Linux。
其實,上面幾家公司開發的軟體和硬體在很多地方都有相似之處,如果每家公司都做自己的系統,這意味著資源和人員的極大浪費。
這時,無論出現新的系統,還是出現新的公司,對這種設計模式的修改都是很大的。
N年後:
Windows出現了,Linux出現了,軟體和硬體終於分離了。這時的系統比如 Windows 既能在IBM機器上運行,也能在HP機器上運行了。
這時軟體專註於軟體,硬體專註於硬體。這也是推動電腦系統不斷髮展的原因(更加專註了嘛),也是推動更多公司出現的原因(成本更低了嘛)。
不管是出現了新硬體平台,還是出現新的OS,大家都能專註於自己領域。也就是外界的變化很大,但對這種模式衝擊卻很小。
//作業系統class OS { public: virtual void Run() {} };//Windowsclass WindowOS: public OS {public: void Run() { cout<<"運行 Windows"<<endl; } };//Linuxclass 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 模式,從中可以看出,它像一座橋,橋兩邊的系統相對獨立,左邊是抽象部分,右邊是實現部分。
三. 組合、彙總複用原則
由上面兩個種結構圖的對比,我們可以引出一個原則:盡量使用組合、彙總,盡量不要使用類繼承。