中介者模式
中介者模式很好的詮釋了迪米特法則,任意兩個不相關的對象之間如果需要關聯,那么需要通過第三個類來進行。中介者就是把一組對象進行封裝,屏蔽了類之間的交互細節,使不同的類直接不需要持有對方引用也可以進行訪問。
中介者Mediator會持有同事類(就是需要處理交互邏輯的對象)Colleague的引用,同時每個colleague也會持有Mediator一份引用。這樣colleague如果有任何和別的類交互的請求就會發給Mediator,對改組對象進行了解耦合。其實我們平時經常寫的視圖控制器本身就是一個中介中,它來控制著不同對象之間的交互行為。
應用場景
- 對象間交互雖然定義明確然而非常復雜,導致一組對象彼此相互依賴而且難以理解;
- 因為對象引用了許多其他對象并與其通訊,導致對象難以復用;
- 想要定制一個分布在多個類中的邏輯或行為,又不想生成太多子類。
中介者的優缺點
優點
Mediator出現減少了各個Colleague的耦合,使得可以獨立地改變和復用各個Colleague類和Mediator,由于把對象如何寫作進行了抽象,將中介者作為一個獨立的概念并將其封裝在一個對象中,這樣關注的對象就從對象各自本身的行為轉移到它們之間的交互上,也就是站在一個更宏觀的角度去看待系統。缺點
由于ConcreteMediator控制了集中化,于是就把交互復雜性變為了中介者的復雜性,這就使得中介者會變得比任何一個ConcreteColleague都復雜。