更詳細(xì)的 Bridge Adapter Facade模式之間的比較

          更詳細(xì)的 Bridge Adapter Facade模式之間的比較

          在這篇文章中 ,我寫(xiě)了Bridge和adapter模式的區(qū)別.但是 maninred說(shuō)
          Bridge和adapter是沒(méi)有關(guān)系的,而和Facade比較象,但在我的經(jīng)驗(yàn)中更多的時(shí)候
          是會(huì)混淆Bridge和adapter而不是Facade,這里詳細(xì)的列出三個(gè)模式的比較 .
          一,定義:
          1.Facade模式是為一個(gè)復(fù)雜系統(tǒng)提供一個(gè)簡(jiǎn)單的接口。
          比如你要去博物館參觀,很多東西,你一個(gè)個(gè)到處去問(wèn)每個(gè)東西的管理員很麻煩,所以你找一個(gè)導(dǎo)游,讓他給你一個(gè)個(gè)介紹,你只要找到導(dǎo)游就好了。導(dǎo)游就是門(mén)面。
          2,適配器模式,引用一下GOF95中的話:
          適配器模式是把一個(gè)類(lèi)的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無(wú)法工作的兩個(gè)類(lèi)能夠工作到一起。
          舉個(gè)例子,例如變壓器
          3,Bridge模式:
          GOF95中的橋梁模式的描述:橋梁模式的用意是"將抽象化與實(shí)現(xiàn)化脫耦,使的二者可以獨(dú)立變化。
          例如AWT的實(shí)現(xiàn)
          二,目的:
          1,Facade模式使用在給一個(gè)復(fù)雜的系統(tǒng)提供統(tǒng)一的門(mén)面(接口),目的是簡(jiǎn)化客戶端的操作,但并沒(méi)有改變接口.
          2,Adapter模式使用在兩個(gè)部分有不同的接口的情況,目的是改變接口,使兩個(gè)部分協(xié)同工作
          3,橋梁模式是為了分離抽象和實(shí)現(xiàn)
          二,使用場(chǎng)合
          1,Facade模式出現(xiàn)較多的情況是這樣的情況,你有一個(gè)復(fù)雜的系統(tǒng),對(duì)應(yīng)了各種情況,
          客戶看了說(shuō)功能不錯(cuò),但是使用太麻煩.你說(shuō)沒(méi)問(wèn)題,我給你提供一個(gè)統(tǒng)一的門(mén)面.
          所以Facade使用的場(chǎng)合多是對(duì)系統(tǒng)的"優(yōu)化".
          2,Adapter模式出現(xiàn)的情況是這樣,你有一個(gè)類(lèi)提供接口A,但是你的客戶需要一個(gè)實(shí)現(xiàn)接口B的類(lèi),
          這個(gè)時(shí)候你可以寫(xiě)一個(gè)Adapter讓把A接口變成B接口,所以Adapter使用的場(chǎng)合是
          指鹿為馬.就是你受夾板氣的時(shí)候,一邊告訴你我只能提供給你A(鹿),一邊告訴你說(shuō)
          我只要B(馬),他長(zhǎng)了四條腿,你沒(méi)辦法了,把鹿?fàn)窟^(guò)去說(shuō),這是馬,你看他有四條腿.
          (當(dāng)然實(shí)現(xiàn)指鹿為馬也有兩種方法,一個(gè)方法是你只露出鹿的四條腿,說(shuō)你看這是馬,這種方式就是
          封裝方式的Adapter實(shí)現(xiàn),另一種方式是你把鹿?fàn)窟^(guò)去,但是首先介紹給他說(shuō)這是馬,因?yàn)樗L(zhǎng)了四條腿
          這種是繼承的方式.)
          3,Bridge模式在一般的開(kāi)發(fā)中出現(xiàn)的情況并不多,AWT是一個(gè),SWT也算部分是,
          如果你的客戶要求你開(kāi)發(fā)一個(gè)系統(tǒng),這個(gè)系統(tǒng)在Windows下運(yùn)行界面的樣子是Windows的樣子.
          在Linux下運(yùn)行是Linux下的樣子.在Macintosh下運(yùn)行要是Mac Os的樣子.
          怎么辦? 定義一系列的控件Button,Text,radio,checkBox等等.供上層開(kāi)發(fā)者
          使用,他們使用這些控件的方法,利用這些控件構(gòu)造一個(gè)系統(tǒng)的GUI,然后你為這些控件
          寫(xiě)好Linux的實(shí)現(xiàn),讓它在Linux上調(diào)用Linux本地的對(duì)應(yīng)控件,
          在Windows上調(diào)用Windows本地的對(duì)應(yīng)控件,在Macintosh上調(diào)用Macintosh本地的對(duì)應(yīng)控件
          ok,你的任務(wù)完成了.
          三,需求程度
          1,Facade的需求程度是"中等",因?yàn)槟悴惶峁〧acade程序照樣能工作,只是不夠好.
          2,Adapter的需求程度是"必須",因?yàn)槟悴贿@么做就不能工作,除非你自己從頭實(shí)現(xiàn)一個(gè).
          3,Bridge的需求程度是"一般",適合精益求精的人,因?yàn)槟憧梢詫?xiě)三個(gè)程序給客戶.
          四,出現(xiàn)時(shí)期
          1,Facade出現(xiàn)在項(xiàng)目中期,再優(yōu)化
          2,Adapter出現(xiàn)在項(xiàng)目后期,大部分都有了,差的僅僅是接口不同
          3,Bridge出現(xiàn)在項(xiàng)目前期,你想讓你的系統(tǒng)更靈活,更c(diǎn)ool
          五,在寫(xiě)文章的時(shí)候想到的
          1,Facade很多時(shí)候是1:m的關(guān)系
          2,Adapter很多是候是1:1的關(guān)系
          3,Bridge很多時(shí)候是m:n的關(guān)系
          呵呵.
          六,最后
          另外:回應(yīng)一下maninred
          1,我并沒(méi)有把模式看的很獨(dú)立,其實(shí)很多模式是配合使用的,而且在一定情況下可以
          用一個(gè)替換另一個(gè).同一個(gè)需求,有可能當(dāng)你思考的角度不同時(shí),使用的模式就不同了.
          2,設(shè)計(jì)模式并不是"用OO的封裝來(lái)封裝所有的東西",模式其實(shí)可以應(yīng)用于所有的設(shè)計(jì)上
          和OO沒(méi)有直接的關(guān)系,只是因?yàn)橛?jì)算機(jī)的設(shè)計(jì)模式大部分是GOF收集總結(jié)的,
          他們講解設(shè)計(jì)模式是用的C++,而在Java中得到了大量應(yīng)用,所以我們談到設(shè)計(jì)模式
          的時(shí)候多提到OO.其實(shí)模式更早應(yīng)用于建筑學(xué),Alexander的《建筑的永恒之道》講的
          就是設(shè)計(jì)模式。所以說(shuō)設(shè)計(jì)模式應(yīng)該是設(shè)計(jì)過(guò)程中積累下來(lái)的一些成型的東西。
          更深入一點(diǎn),《Java與模式》的作者認(rèn)為模式起源于中國(guó)的道教思想,講的是哲學(xué)。呵呵。
          3,對(duì)于模式的使用,個(gè)人感覺(jué),模式很大程度上是為了對(duì)應(yīng)這類(lèi)需求的所有情況,也就
          是最復(fù)雜情況,最靈活情況,當(dāng)我們實(shí)際的開(kāi)發(fā)中并沒(méi)有遇到這么多這樣的情況。
          所以在需要的時(shí)候使用,根據(jù)需求簡(jiǎn)化使用,而不是照搬。
          4,雖然模式是相關(guān)的,但是只有知道了每個(gè)模式的區(qū)別點(diǎn),才能更好的根據(jù)需求選擇使用哪個(gè)模式。

          posted on 2007-01-23 10:34 Tom 閱讀(390) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類(lèi)(42)

          隨筆檔案(43)

          文章分類(lèi)

          相冊(cè)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 武鸣县| 阜新市| 灵宝市| 安徽省| 镇赉县| 甘孜县| 铜陵市| 包头市| 昌邑市| 钟山县| 盘锦市| 林甸县| 横峰县| 常山县| 含山县| 北宁市| 建平县| 遵化市| 鸡东县| 青冈县| 图木舒克市| 莱阳市| 河曲县| 田东县| 长兴县| 宜川县| 崇明县| 宁陕县| 喀喇沁旗| 会宁县| 永城市| 台中县| 福安市| 横山县| 抚松县| 金门县| 江孜县| 娄烦县| 霍州市| 鸡泽县| 沿河|