Bridge和adapter是沒有關(guān)系的,而和Facade比較象,但在我的經(jīng)驗中更多的時候
是會混淆Bridge和adapter而不是Facade,這里詳細(xì)的列出三個模式的比較 .
一,定義:
1.Facade模式是為一個復(fù)雜系統(tǒng)提供一個簡單的接口。
比如你要去博物館參觀,很多東西,你一個個到處去問每個東西的管理員很麻煩,所以你找一個導(dǎo)游,讓他給你一個個介紹,你只要找到導(dǎo)游就好了。導(dǎo)游就是門面。
2,適配器模式,引用一下GOF95中的話:
適配器模式是把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法工作的兩個類能夠工作到一起。
舉個例子,例如變壓器
3,Bridge模式:
GOF95中的橋梁模式的描述:橋梁模式的用意是'將抽象化與實現(xiàn)化脫耦,使的二者可以獨立變化。
例如AWT的實現(xiàn)
二,目的:
1,Facade模式使用在給一個復(fù)雜的系統(tǒng)提供統(tǒng)一的門面(接口),目的是簡化客戶端的操作,但并沒有改變接口.
2,Adapter模式使用在兩個部分有不同的接口的情況,目的是改變接口,使兩個部分協(xié)同工作
3,橋梁模式是為了分離抽象和實現(xiàn)
二,使用場合
1,Facade模式出現(xiàn)較多的情況是這樣的情況,你有一個復(fù)雜的系統(tǒng),對應(yīng)了各種情況,
客戶看了說功能不錯,但是使用太麻煩.你說沒問題,我給你提供一個統(tǒng)一的門面.
所以Facade使用的場合多是對系統(tǒng)的'優(yōu)化'.
2,Adapter模式出現(xiàn)的情況是這樣,你有一個類提供接口A,但是你的客戶需要一個實現(xiàn)接口B的類,
這個時候你可以寫一個Adapter讓把A接口變成B接口,所以Adapter使用的場合是
指鹿為馬.就是你受夾板氣的時候,一邊告訴你我只能提供給你A(鹿),一邊告訴你說
我只要B(馬),他長了四條腿,你沒辦法了,把鹿?fàn)窟^去說,這是馬,你看他有四條腿.
(當(dāng)然實現(xiàn)指鹿為馬也有兩種方法,一個方法是你只露出鹿的四條腿,說你看這是馬,這種方式就是
封裝方式的Adapter實現(xiàn),另一種方式是你把鹿?fàn)窟^去,但是首先介紹給他說這是馬,因為他長了四條腿
這種是繼承的方式.)
3,Bridge模式在一般的開發(fā)中出現(xiàn)的情況并不多,AWT是一個,SWT也算部分是,
如果你的客戶要求你開發(fā)一個系統(tǒng),這個系統(tǒng)在Windows下運行界面的樣子是Windows的樣子.
在Linux下運行是Linux下的樣子.在Macintosh下運行要是Mac Os的樣子.
怎么辦? 定義一系列的控件Button,Text,radio,checkBox等等.供上層開發(fā)者
使用,他們使用這些控件的方法,利用這些控件構(gòu)造一個系統(tǒng)的GUI,然后你為這些控件
寫好Linux的實現(xiàn),讓它在Linux上調(diào)用Linux本地的對應(yīng)控件,
在Windows上調(diào)用Windows本地的對應(yīng)控件,在Macintosh上調(diào)用Macintosh本地的對應(yīng)控件
ok,你的任務(wù)完成了.
三,需求程度
1,Facade的需求程度是'中等',因為你不提供Facade程序照樣能工作,只是不夠好.
2,Adapter的需求程度是'必須',因為你不這么做就不能工作,除非你自己從頭實現(xiàn)一個.
3,Bridge的需求程度是'一般',適合精益求精的人,因為你可以寫三個程序給客戶.
四,出現(xiàn)時期
1,Facade出現(xiàn)在項目中期,再優(yōu)化
2,Adapter出現(xiàn)在項目后期,大部分都有了,差的僅僅是接口不同
3,Bridge出現(xiàn)在項目前期,你想讓你的系統(tǒng)更靈活,更cool
五,在寫文章的時候想到的
1,Facade很多時候是1:m的關(guān)系
2,Adapter很多是候是1:1的關(guān)系
3,Bridge很多時候是m:n的關(guān)系
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。