今天要介紹的模式Mediator,與上一篇Facade的結構有點雷同,不過Mediator是屬於行為型模式,作用不太一樣,現在就來了解Mediator在做甚麼以及與Facade的差異吧!
Mediator Pattern強調的是各個獨立的類別之間無法互相往來,而這些類別如有需要進行合作的話,就會由Mediator本身來協調類別與類別之間的運作,而這些類別只會依賴於一個Mediator,而不是耦合其他的類別。
舉個例子,飛機與飛機之間不會直接互相通信,他們只會與塔台交談,給塔台相關的位置訊息,或是得到塔台提供的飛行資訊,使飛機與飛機的飛行路徑不會有所衝突,而造成空難。倘若沒有了中央塔台,飛行員就要先了解周圍的每架飛機,並與他們討論著飛行路徑或是著陸的優先順序等等,這樣也許會造成飛機失事的機率大大提升。
隨著時間的推移,系統的類別只會越來越多,這些類別之間的往來也會變得越來越複雜,使得維護的成本越來越高。若碰到這種問題就可以用中介者模式來解決,它可以不讓類別與類別之間互相通信,它們唯一的方法就是透過中介者來傳遞訊息。
interface Mediator {
public void notify(Component sender);
}
class ConcreteMediator implements Mediator {
ComponentA componentA = new ComponentA();
ComponentB componentB = new ComponentB();
public void notify(Component sender) {
if (sender == componentA) {
reactOnA();
} else {
reactOnB();
}
}
public void reactOnA() {
// do something
}
public void reactOnB() {
// do something
}
}
interface Component {}
class ComponentA implements Component {
private Mediator mediator;
public void operation() {
mediator.notify(this);
}
}
class ComponentB implements Component {
private Mediator mediator;
public void operationB() {
mediator.notify(this);
}
}
雖然使用Mediator就可以減少程式中各個類別之間的耦合,也能夠更輕鬆的重用單一物件,但是要注意的是,Mediator可能會隨著程式不斷的更新,而進化成God Object。
除此之外,也歡迎大家走走逛逛關於我們團隊夥伴的文章
juck30808 - Python - 數位行銷分析與 Youtube API 教學
SiQing47 - 前端?後端?你早晚都要全端的,何不從現在開始?