21 Mediator(行爲型)
-
- 中介者/調停者對象封裝了一系列對象相互作用的方式,使得這些對象不必互相明顯引用。從而使它們可以較鬆散地耦合。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其他的一些對象之間的相互作用。從而保證這些相互作用可以彼此獨立地變化。)
- 動機:
- 面向對象設計鼓勵在對象之間分佈行爲。這種分佈可以產生對象結構,對象之間有許多連接;在最壞的情況下,每個對象最終都知道彼此。
- 什麼時候用:
- 一組對象以定義良好但複雜的方式通信。由此產生的相互依賴關係是非結構化的,難以理解。
- 重用一個對象是困難的,因爲它涉及並與許多其他對象通信。
- 分佈在多個類之間的行爲應該是可自定義的,而不需要很多子類化。
- 結構:
-
- 參與者:
- 中介:定義用於與同事對象通信的接口。
- 具體的中介者:通過協調同事對象來實現協作行爲。瞭解並維護其同事。
- Colleague classes:
- 每個同事類都知道它的中介對象。
- 每一個同事與它的調解人溝通時,它將會與另一個同事溝通。(
- 參與者:
colleague間的通信一定要通過mediator)
-
- 協作:
- Colleagues send and receive requests from a Mediator object.
- 中介通過在適當的同事之間路由請求來實現協作行爲。
- 好處:
- 解耦
- 簡化對象協議
- 對象之間的合作抽象出來
- 集中控制
- 中介模式以交互的複雜性換成了中介者的複雜性。
- 由於中介封裝了協議,因此它可能比任何單個同事都要複雜。這可以使中介本身一個龐然大物(巨無霸),很難維護。
- 協作:
-
- 缺點:
- 所有複雜性在中介者中
- 避免誤用中介者
- 中介模式適用於避免混亂和醜陋的系統。
- 中介模式不應該應用於一個混亂和醜陋的系統。
- 缺點:
-
- 原則:最小知識原則