用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯示地互相引用,進而使其耦合松散,而且可以獨立地改變它們之間的互動。
define an object that encapsulates how a set of objects interact. mediator promotes loose coupling by keeping objects from refering to each other explicitly, and it lets you vary their interaction independently.

中介者模式的結構中包括四種角色。
+ 中介者(mediator):中介者使一個接口,該接口定義了用于同僚(colleague)對象之間進行通信的方法。
+ 具體中介者(concrete mediator):具體中介者是實作中介者接口的類。具體中介者需要包含所有具體同僚(concrete colleague)的引用,并通過實作中介者接口中的方法來滿足具體同僚之間的通信請求。
+ 同僚(colleague):一個接口,規定了具體同僚需要實作的方法。
+ 具體同僚(concrete colleague):實作同僚接口的類。具體同僚需要包含具體中介者的引用,一個具體同僚需要和其他同僚互動時,隻需将自己的請求通知給它所包含的具體中介者即可。
可以避免許多的對象為了之間的通信而互相顯示引用,否則,不僅系統難于維護,而且也使其他系統難以複用這些對象。
可以通過中介者将原本分布于多個對象之間的互動行為集中在一起。當這些對象之間需要改變之間的通信行為時,隻需使用一個具體中介者即可,不必修改各個具體同僚的代碼,即這些同僚可被重用。
具體中介者使得各個具體同僚完全解耦,修改任何一個具體同僚的代碼不會影響到其他同僚。
具體中介者集中了同僚之間是如何互動的細節,使系統比較清楚地知道整個系統中同僚是如何互動的。
當一些對象想互相通信,但又無法互相包含對方的引用,那麼使用中介者模式就可以使這些對象互相通信。
注:由于具體中介者集中了同僚之間是如何互動的細節,可能使具體具體中介者變得非常複雜,增加了維護的難度。
許多對象以複雜的方式交,所導緻的依賴關系使系統難以了解和維護。
一個對象引用其他很多對象,導緻難以複用該對象。
<a href="https://github.com/androidwolf">mygithub</a>