民初思韻網

加入收藏   設為首頁
選擇語言   簡體中文
你好,請 登陸 或 注冊
首頁 人文思韻 傳奇人物 歷史思潮 時代作品 話題討論 國民思韻 民初捐助 賬戶管理
  搜索  
    人文精神 >>> 技術的天空 溫和的思緒
字體    

  C#面向對象設計模式縱橫談 第11講:Facade 外觀模式
C#面向對象設計模式縱橫談 第11講:Facade 外觀模式
MSDN 網絡廣播 李建忠     阅读简体中文版

2006.3.10 李建忠

系統的復雜度

假設我們需要開發一個坦克模擬系統用于模擬坦克車在各種作戰環境中的行為,其中坦克系統由引擎、控制器、車輪、車身等各子系統構成。

image

 

如何使用這樣的系統

image

 

動機(Motivation)

上述A方案的問題在于組件的客戶(即外部接口,或客戶程序)和組件中各種復雜的子系統有了過多的耦合,隨著外部客戶程序和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。

如何簡化外部客戶程序和系統間的交互接口?如何將外部客戶程序的演化和內部子系統的變化之間的依賴相互解耦?

 

意圖(Intent)

為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

——《設計模式》GoF

 

例說Facade應用

以前面的例子為例

image

image

我們所說的接口其實并不一定是Interface,只要是Public方法,能被外部調用的方法都叫接口,這里的定義其實是更加廣義的接口定義,即露在外面和外界所交互的這一部分。

這里主系統和子系統之間的關系不是繼承關系,而應該是一種包含的關系。

image

這樣在外部使用的時候只能使用TankFacade類和里面的Start、Stop等方法,其他子系統都被包含在內部了。這樣減輕了使用的復雜度,客戶程序只用關心TankFacade,而不用關心里面的子系統情況。更重要的是,這樣的設計有效地把客戶程序和子系統解耦。

 

結構(Structure)

image

這種結構不僅體現了類的單一職責原則,而且也體現了開放封閉原則。而且子系統和系統之間是個組合關系,而不是繼承關系。高層總是相對穩定,低層總是相對易變。所以我們應該盡量依賴高層抽象,而不是低層細節實現。

 

Facade模式的幾個要點

從客戶程序的角度來看,Facade模式不僅簡化了整個組件系統的接口,同時對于組件內部與外部客戶程序來說,從某種程度上也達到了一種“解耦”的效果——內部子系統的任何變化不會影響到Facade接口的變化。

Facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。Facade很多時候更是一種架構設計模式。

注意區分Facade模式、Adapter模式、Bridge模式與Decorator模式:

Facade模式注重簡化接口

Adapter模式注重轉換接口

Bridge模式注重分離接口(抽象)與其實現

Decorator模式注重穩定接口的前提下為對象擴展功能

 

.NET架構中的Facade應用

假如我們做一個網上購物系統,考慮它的認證系統。用戶權限不同,能做的事情也不同,它可能會調用各種各樣的子系統。認證系統里面也可能包含很多子系統,比如第三方認證等等。這些認證子系統合作起來豐富了我們網站的功能,那么這種情況我們就可以考慮把認證的各個子系統封裝成一個認證系統。

如果我們想做跨平臺的及時聊天工具,我們也可以用一個Facade封裝某個平臺系統的API接口。這樣我們在使用API的時候,就不需要去關心平臺內部的變化。

2010.10.4

2013-08-22 08:47

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
晚清改革家強權人物
袁世凱(1859年9月16日-1916年6月6日),字慰亭,號容庵,河南項城人,故又稱袁項城,清末民初的軍事和政治人物,北洋系統的領袖。袁世凱出生於清咸豐九年八月二十日(....
憲政專家民主理論大師
宋教仁(1882年4月5日-1913年3月22日),字鈍初,號漁父,生於中國湖南省桃源縣,中國近代民主革命家,是中華民國初期第一位倡導內閣制的政治家。
資助民初精神網
        回頂部     寫評論

 
評論集
暫無評論!
發表評論歡迎你的評論
昵稱:     登陸  註冊
主頁:  
郵箱:  (僅管理員可見)

驗證:   验证码(不區分大小寫)  
© 2011   民初思韻網-清末民初傳奇時代的發現與復興   版權所有   加入收藏    設為首頁    聯繫我們    1616導航