用乙個中介物件來封裝一系列的物件互動。中介者使各物件不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變他們之間的互動。
在未來的智慧型家居中,家裡的各種電器相互關聯,假設這樣三種電器:鬧鐘,日曆和咖啡壺。現在有這樣兩個任務:
當按下鬧鐘的「延遲」按鈕(過5分鐘後再次響鈴)後,日曆檢查今天是否是星期日,如果不是,則咖啡壺開始準備咖啡。
當關閉日曆,咖啡壺和鬧鐘也一同關閉。
同事類,每乙個同事都知道他的中介者,當它需要與其他同事交流時,它只需通知中介者。
public abstract class colleague
}public mediator themediator
set }}
'>public
abstract
class
colleague
}public mediator themediator
set }}
具體同事
public class alarm : colleague
public void alarmlater()
public void poweroff()
}public class coffeepot : colleague
public void preparecoffee()
public void poweroff()
}public class calendar : colleague
public dayofweek getdayofweek()
public void poweroff()
}
'> public
class
alarm : colleague
public
void
alarmlater
() public
void
poweroff
() }
public
class
coffeepot : colleague
public
void
preparecoffee
() public
void
poweroff
() }
public
class
calendar : colleague
public dayofweek getdayofweek
() public
void
poweroff
() }
中介者定義乙個用於與各同事通訊的介面
public class mediator
}
'> public
class
mediator
}具體中介者了解和維護各個同事,並協調各同事以實現協作行為。
public class futurehouse : mediator
set
}public coffeepot housecoffeepot
set
}public alarm housealarm
set
}private void weekup()
}private void poweroff()
public override void notify(colleague colleague)
else if (colleague.type == "calendar")}}
'> public
class
futurehouse : mediator
set
}public coffeepot housecoffeepot
set
}public alarm housealarm
set
}private
void
weekup
() }
private
void
poweroff
() public
override
void
notify
(colleague colleague)
else
if(colleague.type == "calendar")}}
使用
class program
}
'>class
program
}執行結果
減少了子類
將各colleague解耦
簡化了物件協議,使用mediator和各colleague間的一對多互動替代多對多互動
它對物件如何進行協助進行了抽象
使控制集中化
中介者可能變得龐大而且複雜,難以維護
《head first 設計模式》
《設計模式》
設計模式 中介者模式
假如沒有總經理,下面三個部門 財務部,市場部,研發部。財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣 市場部要接新專案,需要研發部處理技術 需要財務部出資金。市場部跟各個部門打交道。雖然只有三個部門,但是關係非常亂。實際上,公司都有總經理。各個部門有什麼事情都通報到總經理這裡,總經理再通知...
設計模式 中介者模式
在我們的日常生活中經常需要購買各種各樣的東西,房子 車子 生活用品等等。那麼我們並不會對各個產品都了解,所以銷售人員應運而生,他們了解產品,然後他們根據你的需求在向你們推薦符合你們要求的產品。這些銷售人員就相當於中介,處於客戶和產品之間,為你們搭橋牽線。這就是這篇需要講述的乙個設計模式 中介者模式。...
設計模式 中介者模式
在學習這個模式之前,我們先來回顧一下乙個物件導向的設計原則 迪公尺特原則,這個原則告訴我們 乙個物件盡可能少跟其他物件進行關聯,就像乙個人要少跟陌生人說話一樣。而中介者模式,也正是為了協調多個物件之間複雜的引用關係。我們來看乙個例子,雖然這個例子不太好,後期想個好一點的例子再改。在中介者模式中,主要...