Bridge 、 Adapter 和 Facade 的區別

Bridge和Adapter是沒有關係的,而和Facade比較象,但在個人經驗中更多的時候是會混淆Bridge和adapter而不是Facade,這裏詳細的列出三個模式的比較。優化

 

一. 定義:

一、Facade模式是爲一個複雜系統提供一個簡單的接口。好比你要去博物館參觀,不少東西,你一個個處處去問每一個東西的管理員很麻煩,因此你找一個導遊,讓他給你一個個介紹,你只要找到導遊就行了。導遊就是門面。
二、適配器模式,適配器模式是把一個類的接口變換成客戶端所期待的另外一種接口,從而使本來因接口不匹配而沒法工做的兩個類可以工做到一塊兒。例如變壓器
三、Bridge模式,橋樑模式的用意是"將抽象化與實現化脫耦,使的兩者能夠獨立變化。例如AWT的實現繼承

 

二. 目的:

一、Facade模式使用在給一個複雜的系統提供統一的門面(接口),目的是簡化客戶端的操做,但並無改變接口。
二、Adapter模式使用在兩個部分有不一樣的接口的狀況,目的是改變接口,使兩個部分協同工做。
三、橋樑模式是爲了分離抽象和實現。接口


三. 使用場合

一、Facade模式出現較多的狀況是這樣的狀況,你有一個複雜的系統,對應了各類狀況,客戶看了說功能不錯,可是使用太麻煩。你說沒問題,我給你提供一個統一的門面。
因此Facade使用的場合可能是對系統的"優化"。
二、Adapter模式出現的狀況是這樣,你有一個類提供接口A,可是你的客戶須要一個實現接口B的類,這個時候你能夠寫一個Adapter讓把A接口變成B接口,因此Adapter使用的場合是混淆是非。就是你受夾板氣的時候,一邊告訴你我只能提供給你A(鹿),一邊告訴你說我只要B(馬),他長了四條腿,你沒辦法了,把鹿牽過去說,這是馬,你看他有四條腿。(固然實現混淆是非也有兩種方法,一個方法是你只露出鹿的四條腿,說你看這是馬,這種方式就是封裝方式的Adapter實現,另外一種方式是你把鹿牽過去,可是首先介紹給他說這是馬,由於他長了四條腿這種是繼承的方式。)
三、Bridge模式在通常的開發中出現的狀況並很少,AWT是一個,SWT也算部分是,若是你的客戶要求你開發一個系統,這個系統在Windows下運行界面的樣子是Windows的樣子。在Linux下運行是Linux下的樣子。在Macintosh下運行要是Mac Os的樣子。怎麼辦? 定義一系列的控件Button,Text,radio,checkBox等等。供上層開發者使用,他們使用這些控件的方法,利用這些控件構造一個系統的GUI,而後你爲這些控件寫好Linux的實現,讓它在Linux上調用Linux本地的對應控件,在Windows上調用Windows本地的對應控件,在Macintosh上調用Macintosh本地的對應控件。ok。你的任務完成了。ci


四. 需求程度

一、Facade的需求程度是"中等",由於你不提供Facade程序照樣能工做,只是不夠好。
二、Adapter的需求程度是"必須",由於你不這麼作就不能工做,除非你本身從頭實現一個。
三、Bridge的需求程度是"通常",適合精益求精的人,由於你能夠寫三個程序給客戶。開發


五. 出現時期

一、Facade出如今項目中期,再優化
二、Adapter出如今項目後期,大部分都有了,差的僅僅是接口不一樣
三、Bridge出如今項目前期,你想讓你的系統更靈活,更coolio


六. 在寫文章的時候想到的

一、Facade不少時候是1:m的關係。
二、Adapter不少是候是1:1的關係。
三、Bridge不少時候是m:n的關係。程序

相關文章
相關標籤/搜索