民初思韻網

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

C#面向對象設計模式縱橫談 第17講:Mediator 中介者模式
C#面向對象設計模式縱橫談 第17講:Mediator 中介者模式
MSDN 網絡廣播 李建忠     阅读简体中文版

2006.6.29 李建忠

依賴關系的轉化

image

 

動機(Motivation)

在軟件構建過程中,經常會出現多個對象互相關聯交互的情況,對象之間常常會維持一種復雜的引用關系,如果遇到一些需求的更改,這種直接的引用關系將面臨不斷地變化。

在這種情況下,我們可使用一個“中介對象”來管理對象間的關聯關系,避免相互交互的對象之間的緊耦合引用關系,從而更好地抵御變化。

 

意圖(Intent)

用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式的相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

——《設計模式》GoF

 

例說Mediator引用

菜單中的按鈕要根據其他的操作來響應它的狀態,例如:Undo按鈕需要至少進行一次操作才可用;Redo按鈕是需要先按下Undo按鈕之后才可用等等。

下面的例子討論剪切操作

image

image image

每一個對象都和其它三個對象進行關聯。這樣的關聯非常復雜,而且非常脆弱。

這樣我們就需要往中介者模式演化,每一個類都引用中介者,由中介者去通知其它對象。

image

image

image

這個時候依賴關系就轉化了,我們新添加一個類的時候,互相是不知道的。Element及其子類依賴于抽象的Mediator接口,Mediator也依賴于Element,它們是互相依賴的。但是每一個Element互相是不依賴的。Mediator有改變的時候,需要去找到list一個一個去通知其它Element。

 

結構(Structure)

image

Colleague對應Element,ConcreteMediator和ConcreteColleague其實并沒有直接依賴,而是間接地依賴。

 

Mediator模式的幾個要點

將多個對象間復雜的關聯關系解耦,Mediator模式將多個對象間的控制邏輯進行集中管理,變“多個對象互相關聯”為“多個對象和一個中介者關聯”,簡化了系統的維護,抵御了可能的變化。

隨著控制邏輯的復雜化,Mediator具體對象的實現可能相當復雜。這時候可以對Mediator對象進行分解處理。

Facade模式是解耦系統外到系統內(單向)的對相關聯關系

Mediator模式是解耦系統內各個對象之間(雙向)的關聯關系

 

.NET架構中的Mediator

在WindowsForm中,每一個控件與控件之間都有消息的傳遞。

在WindowsForm中的ApplicationContext類扮演了一個中介者的角色,它走了整個的消息循環,把所有進來的消息進行處理。

image

在每個控件里面都有個WndProc方法的重載,它其實就是處理每個消息的方法

image

WindowsForm里面的控件都繼承自Control類,Control類就是上面例子中的Element類,而WndProc方法就是上面例子中的OnChange方法。
image

這個方法負責處理所有的消息,它里面也體現了復雜度,它里面做了很多的Switch來判斷是什么樣的消息。當點擊一個Button,其它控件就通過ApplicationContext來進行反應。

2010.10.13

2013-08-22 08:50

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
革命先行者民國之父
孫中山(1866年11月12日-1925年3月12日),本名孫文,字載之,號日新、逸仙,廣東香山(今中山)人,是醫師、近代中國的民主革命家、中國國民黨總理、第一任中華民國....
從國務總理到修道士
陸徵祥(1871-1949年),字子欣,一作子興,上海人。中國近代著名的天主教人士,也是著名的外交官。他出生于一個基督教家庭,父親是一位基督教新教徒,曾經在倫敦傳教會工作....
資助民初精神網
        回頂部     寫評論

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

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