?? mediatorpattern.htm
字號:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>Mediator 模式</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">Design Pattern: Mediator 模式</a></h1>
Mediator的意思是中介者、調節者、傳遞物,顧名思義,這個模式在程式中必然負擔一個中介、調節、傳遞的工作。<br>
<br>
物件導向設計中,每個物件所負擔的工作盡可能的簡單明了,鼓勵物件將工作分布至其它物件上,讓一群工作屬性相同的物件得以共同合作,即所謂高聚合性,以增加物件的可重用性。<br>
<br>
然而在組織物件工作的同時,物件彼此之間可能知道彼此的存在,并相互依賴,這就使得物件之間的耦合性相對的提高,最差的情況下,所有的物件都知道彼此的存在,這又會使得系統的重用性降低。<br>
<br>
Mediator模式用一個中介的物件來封裝物件彼此之間的交互,物件之間并不用互相知道另一方,這可以降低物件之間的耦合性,如果要改變物件之間的交互行為,也只需要對Mediator加以修改即可。<br>
<br>
在 <a href="GoF.htm">Gof 的書</a> 中所舉的例子為對話方塊組件;例如,當一個特定的輸入欄為空時,另一個按鈕不能使用;在ListBox的選項中選擇一個項目,將會改變另一個欄位的內容;反過來的,輸入欄位的內容也會影響ListBox的選擇等等。 <br>
<div style="text-align: center;"><img style="width: 478px; height: 374px;" alt="Mediator" title="Mediator" src="images/mediator-1.jpg"><br>
</div>
<br>
在這個例子中,可以設計對話方塊中的組件知道彼此的存在,由一個直接影響另一個(或多個)組件,但最好的方法,還是設計一個Mediator,由它來協調組件之間的交互,例如設計一個FontDialogDirector類別來作為中介者。 <br>
<div style="text-align: center;"><img style="width: 395px; height: 235px;" alt="Mediator" title="Mediator" src="images/mediator-2.jpg"><br>
</div>
<br>
可以從Sequence Diagram來了解Mediator的運作:<br>
<div style="text-align: center;"><img style="width: 480px; height: 541px;" alt="Mediator" title="Mediator" src="images/mediator-3.jpg"><br>
</div>
<br>
當ListBox發生變化時,它會呼叫Mediator的listBoxChanged()方法,Mediator取得變化的組件之狀態,并重新設定所有
與它有交互的組件,同樣的,其它的組件發生變化時,也呼叫Mediator上對應的方法,由Mediator來取得組件變化,并設定其它互動的組件。<br>
<br>
簡單的說,Mediator設計有與組件溝通的介面,介面中封裝了與其它組件互動細節,組件與組件之間不用知道彼此的存在,它們只要與Mediator溝通就好了,利用這種方式,可以切開組件與組件之間的耦合。<br>
<br>
Mediator模式的 UML 結構圖如下所示: <br>
<div style="text-align: center;"><img style="width: 482px; height: 191px;" alt="Mediator" title="Mediator" src="images/mediator-4.jpg"><br>
</div>
基本上Mediator模式在使用的彈性很大,由Sequence Diagram理解概念,會比從Class
Diagram了解結構來得重要,不過在Class
Diagram中可以注意的是類別的名稱,Colleague是同事的意思,將一群共事的元件視為一群共同合作的同事,為了使同事之間的活動獨立,并使得
團隊合作的交互更具彈性,需要一個Mediator來協調同事之間的業務行為。<br>
<br>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -