設計模式——中介者模式

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述調停者(Mediator)模式的:調停者模式是對象的行為模式。調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯引用。從而使它們可以較鬆散地耦合。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其他的一些對象之間的相互作用。從而保證這些相互作用可以彼此獨立地變化。

中介者模式(Mediator Pattern)也稱為調停者模式,屬於行為型模式。通過中介類來完成各個類之間的通訊,解綁各個類之間的耦合,而且可以獨立地改變它們之間的交互。中介者模式主要適用在網狀結構的對象關係中,將它們之間關係變為星狀結構,所有對象都只跟中介者對象進行通訊,相互之間沒有直接關係,通過中介者類來集中控制對象的交互關係。

中介者模式結構

UML圖

設計模式——中介者模式

中介者模式組成角色

  • 抽象中介者角色(Mediator):定義同事對象到中介者對象的接口,主要方法是一個或多個事件方法。

  • 抽象同事類角色(Colleague):定義中介者角色到同事角色之間的接口,同事對象只知道有中介者不知道是否有其它同事。

  • 具體同事類角色(ConcreteColleague):具體同事類角色繼承抽象同事類,實現自己的業務,在需要與其他同事通信的時候,就與持有的中介者通信,中介者會負責與其他的同事交互。

案例演示

舉一個比較常見的例子,在工作中小組會議要求組內每個人參與,在以前,我們可能是把組內的人挨個通知一次“下午要開會了”。非常麻煩,現在我們使用中介者模式,只需要在通訊錄中發一個開會通知,由這個中介者將該消息傳遞給對應人員。

定義抽象中介者角色

設計模式——中介者模式

在這裡定義一個方法,用來同事角色通知中介者角色發生改變。

定義具體中介者角色

設計模式——中介者模式

在具體中介者中,定義了需要包含的同事角色的對象,然後實現數據改變通知接口。

定義抽象同事角色

設計模式——中介者模式

在抽象角色中定義了發送消息接口和處理中介者發送消息的接口。

定義具體角色

設計模式——中介者模式

客戶端

設計模式——中介者模式

執行結果

設計模式——中介者模式

總結

中介者模式的優點

  • 鬆散耦合,中介者模式把不同的同事對象之間的關係交互封裝到中介類中,從而使得同事角色之間耦合度降低,這樣就達到降低耦合的效果,同事對象可以獨立變化使用,不相互干擾。

  • 集中控制交互,將多個同事角色對象的交互封裝到中介者中進行集中管理,使得這些交互改變的時候只需要修改中介者類就可以了,使系統具有良好的擴展性。

  • 多對多關係變成一對多關係,沒有使用中介者模式的時候,同事對象之間的關係通常是多對多的,引入中介者對象以後,中介者對象和同事對象的關係通常變成雙向的一對多,這會讓對象的關係更容易理解和實現。

中介者模式缺點

過度集中化。如果同事對象的交互非常多,而且比較複雜,當這些複雜性全部集中到中介者的時候,會導致中介者對象變得十分複雜,而且難於管理和維護。

設計模式——中介者模式


分享到:


相關文章: