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