<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

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

    在這篇文章中,我寫了Bridge和adapter模式的區別.但是 maninred說
    Bridge和adapter是沒有關系的,而和Facade比較象,但在我的經驗中更多的時候
    是會混淆Bridge和adapter而不是Facade,這里詳細的列出三個模式的比較 .
    一,定義:
    1.Facade模式是為一個復雜系統提供一個簡單的接口。
    比如你要去博物館參觀,很多東西,你一個個到處去問每個東西的管理員很麻煩,所以你找一個導游,讓他給你一個個介紹,你只要找到導游就好了。導游就是門面。
    2,適配器模式,引用一下GOF95中的話:
    適配器模式是把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法工作的兩個類能夠工作到一起。
    舉個例子,例如變壓器
    3,Bridge模式:
    GOF95中的橋梁模式的描述:橋梁模式的用意是"將抽象化與實現化脫耦,使的二者可以獨立變化。
    例如AWT的實現
    二,目的:
    1,Facade模式使用在給一個復雜的系統提供統一的門面(接口),目的是簡化客戶端的操作,但并沒有改變接口.
    2,Adapter模式使用在兩個部分有不同的接口的情況,目的是改變接口,使兩個部分協同工作
    3,橋梁模式是為了分離抽象和實現
    二,使用場合
    1,Facade模式出現較多的情況是這樣的情況,你有一個復雜的系統,對應了各種情況,
    客戶看了說功能不錯,但是使用太麻煩.你說沒問題,我給你提供一個統一的門面.
    所以Facade使用的場合多是對系統的"優化".
    2,Adapter模式出現的情況是這樣,你有一個類提供接口A,但是你的客戶需要一個實現接口B的類,
    這個時候你可以寫一個Adapter讓把A接口變成B接口,所以Adapter使用的場合是
    指鹿為馬.就是你受夾板氣的時候,一邊告訴你我只能提供給你A(鹿),一邊告訴你說
    我只要B(馬),他長了四條腿,你沒辦法了,把鹿牽過去說,這是馬,你看他有四條腿.
    (當然實現指鹿為馬也有兩種方法,一個方法是你只露出鹿的四條腿,說你看這是馬,這種方式就是
    封裝方式的Adapter實現,另一種方式是你把鹿牽過去,但是首先介紹給他說這是馬,因為他長了四條腿
    這種是繼承的方式.)
    3,Bridge模式在一般的開發中出現的情況并不多,AWT是一個,SWT也算部分是,
    如果你的客戶要求你開發一個系統,這個系統在Windows下運行界面的樣子是Windows的樣子.
    在Linux下運行是Linux下的樣子.在Macintosh下運行要是Mac Os的樣子.
    怎么辦? 定義一系列的控件Button,Text,radio,checkBox等等.供上層開發者
    使用,他們使用這些控件的方法,利用這些控件構造一個系統的GUI,然后你為這些控件
    寫好Linux的實現,讓它在Linux上調用Linux本地的對應控件,
    在Windows上調用Windows本地的對應控件,在Macintosh上調用Macintosh本地的對應控件
    ok,你的任務完成了.
    三,需求程度
    1,Facade的需求程度是"中等",因為你不提供Facade程序照樣能工作,只是不夠好.
    2,Adapter的需求程度是"必須",因為你不這么做就不能工作,除非你自己從頭實現一個.
    3,Bridge的需求程度是"一般",適合精益求精的人,因為你可以寫三個程序給客戶.
    四,出現時期
    1,Facade出現在項目中期,再優化
    2,Adapter出現在項目后期,大部分都有了,差的僅僅是接口不同
    3,Bridge出現在項目前期,你想讓你的系統更靈活,更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,對于模式的使用,個人感覺,模式很大程度上是為了對應這類需求的所有情況,也就
    是最復雜情況,最靈活情況,當我們實際的開發中并沒有遇到這么多這樣的情況。
    所以在需要的時候使用,根據需求簡化使用,而不是照搬。
    4,雖然模式是相關的,但是只有知道了每個模式的區別點,才能更好的根據需求選擇使用哪個模式。

    posted on 2007-01-08 23:21 dreamstone 閱讀(4320) 評論(3)  編輯  收藏 所屬分類: 設計模式

    評論

    # re: 更詳細的 Bridge Adapter Facade模式之間的比較 2007-08-09 13:56 Joey

    good!  回復  更多評論   

    # re: 更詳細的 Bridge Adapter Facade模式之間的比較 2008-01-12 16:14 啊達

    good!  回復  更多評論   

    # re: 更詳細的 Bridge Adapter Facade模式之間的比較[未登錄] 2013-06-03 11:57 henry

    關于adapter和facade的區別解釋的很易懂  回復  更多評論   

    主站蜘蛛池模板: 自拍偷区亚洲国内自拍| 久久久久久国产a免费观看黄色大片 | 无码人妻久久一区二区三区免费丨| 国产裸体美女永久免费无遮挡 | 国拍在线精品视频免费观看| 国产情侣久久久久aⅴ免费| 亚洲AV日韩AV无码污污网站| 亚洲精品伊人久久久久| 亚洲资源在线视频| 亚洲一区AV无码少妇电影☆| 国产gav成人免费播放视频| 成年男女男精品免费视频网站| 久久久久免费看成人影片| 国内精品一级毛片免费看| 一级一片免费视频播放| 午夜亚洲乱码伦小说区69堂| 亚洲最大中文字幕无码网站 | 最近免费2019中文字幕大全| 在线观看免费无码视频| 国产成人无码精品久久久久免费 | 亚洲日本一区二区三区在线不卡| 精品国产一区二区三区免费看| 男女超爽刺激视频免费播放| 色猫咪免费人成网站在线观看| 你好老叔电影观看免费| 97超高清在线观看免费视频| 国产精品免费久久久久久久久| 一区二区三区视频免费| 色吊丝性永久免费看码| 九九久久国产精品免费热6 | 亚洲欧洲日产国码无码久久99| 国产精品亚洲视频| 中文字幕精品亚洲无线码一区应用| 亚洲国产精品人人做人人爱| 亚洲av午夜成人片精品电影| 人人狠狠综合久久亚洲高清| 亚洲av午夜成人片精品电影| 国产黄色一级毛片亚洲黄片大全| 激情综合色五月丁香六月亚洲| 在线观看亚洲精品国产| 亚洲爆乳无码专区|