更詳細的 Bridge Adapter Facade模式之間的比較

          更詳細的 Bridge Adapter Facade模式之間的比較

          在這篇文章中 ,我寫了Bridge和adapter模式的區(qū)別.但是 maninred說
          Bridge和adapter是沒有關系的,而和Facade比較象,但在我的經(jīng)驗中更多的時候
          是會混淆Bridge和adapter而不是Facade,這里詳細的列出三個模式的比較 .
          一,定義:
          1.Facade模式是為一個復雜系統(tǒng)提供一個簡單的接口。
          比如你要去博物館參觀,很多東西,你一個個到處去問每個東西的管理員很麻煩,所以你找一個導游,讓他給你一個個介紹,你只要找到導游就好了。導游就是門面。
          2,適配器模式,引用一下GOF95中的話:
          適配器模式是把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法工作的兩個類能夠工作到一起。
          舉個例子,例如變壓器
          3,Bridge模式:
          GOF95中的橋梁模式的描述:橋梁模式的用意是"將抽象化與實現(xiàn)化脫耦,使的二者可以獨立變化。
          例如AWT的實現(xiàn)
          二,目的:
          1,Facade模式使用在給一個復雜的系統(tǒng)提供統(tǒng)一的門面(接口),目的是簡化客戶端的操作,但并沒有改變接口.
          2,Adapter模式使用在兩個部分有不同的接口的情況,目的是改變接口,使兩個部分協(xié)同工作
          3,橋梁模式是為了分離抽象和實現(xiàn)
          二,使用場合
          1,Facade模式出現(xiàn)較多的情況是這樣的情況,你有一個復雜的系統(tǒng),對應了各種情況,
          客戶看了說功能不錯,但是使用太麻煩.你說沒問題,我給你提供一個統(tǒng)一的門面.
          所以Facade使用的場合多是對系統(tǒng)的"優(yōu)化".
          2,Adapter模式出現(xiàn)的情況是這樣,你有一個類提供接口A,但是你的客戶需要一個實現(xiàn)接口B的類,
          這個時候你可以寫一個Adapter讓把A接口變成B接口,所以Adapter使用的場合是
          指鹿為馬.就是你受夾板氣的時候,一邊告訴你我只能提供給你A(鹿),一邊告訴你說
          我只要B(馬),他長了四條腿,你沒辦法了,把鹿牽過去說,這是馬,你看他有四條腿.
          (當然實現(xiàn)指鹿為馬也有兩種方法,一個方法是你只露出鹿的四條腿,說你看這是馬,這種方式就是
          封裝方式的Adapter實現(xià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ā)者
          使用,他們使用這些控件的方法,利用這些控件構造一個系統(tǒng)的GUI,然后你為這些控件
          寫好Linux的實現(xiàn),讓它在Linux上調(diào)用Linux本地的對應控件,
          在Windows上調(diào)用Windows本地的對應控件,在Macintosh上調(diào)用Macintosh本地的對應控件
          ok,你的任務完成了.
          三,需求程度
          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的關系
          2,Adapter很多是候是1:1的關系
          3,Bridge很多時候是m:n的關系
          呵呵.
          六,最后
          另外:回應一下maninred
          1,我并沒有把模式看的很獨立,其實很多模式是配合使用的,而且在一定情況下可以
          用一個替換另一個.同一個需求,有可能當你思考的角度不同時,使用的模式就不同了.
          2,設計模式并不是"用OO的封裝來封裝所有的東西",模式其實可以應用于所有的設計上
          和OO沒有直接的關系,只是因為計算機的設計模式大部分是GOF收集總結的,
          他們講解設計模式是用的C++,而在Java中得到了大量應用,所以我們談到設計模式
          的時候多提到OO.其實模式更早應用于建筑學,Alexander的《建筑的永恒之道》講的
          就是設計模式。所以說設計模式應該是設計過程中積累下來的一些成型的東西。
          更深入一點,《Java與模式》的作者認為模式起源于中國的道教思想,講的是哲學。呵呵。
          3,對于模式的使用,個人感覺,模式很大程度上是為了對應這類需求的所有情況,也就
          是最復雜情況,最靈活情況,當我們實際的開發(fā)中并沒有遇到這么多這樣的情況。
          所以在需要的時候使用,根據(jù)需求簡化使用,而不是照搬。
          4,雖然模式是相關的,但是只有知道了每個模式的區(qū)別點,才能更好的根據(jù)需求選擇使用哪個模式。

          posted on 2007-01-23 10:34 Tom 閱讀(382) 評論(0)  編輯  收藏 所屬分類: Java

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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類(42)

          隨筆檔案(43)

          文章分類

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洪泽县| 海南省| 将乐县| 平阴县| 乌兰察布市| 棋牌| 沾化县| 纳雍县| 英吉沙县| 青河县| 页游| 柳林县| 繁昌县| 临漳县| 临武县| 樟树市| 馆陶县| 博罗县| 承德县| 黄龙县| 平阴县| 河池市| 馆陶县| 大连市| 泸州市| 古浪县| 尚义县| 绥棱县| 龙海市| 汕头市| 汉中市| 霍城县| 武威市| 贺兰县| 甘谷县| 合作市| 镇远县| 名山县| 哈尔滨市| 龙游县| 社会|