今天要介绍的模式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 - 前端?後端?你早晚都要全端的,何不从现在开始?
>>: Day 24:霍夫曼编码(Huffman coding)
Transition 使用 昨天讲到元素的变形,而今天的 Transition 就是使用在元素改变时...
万物皆有他的结构, 就如同世界上所有东西皆由元素所组成, 而定义这些结构在C#中称为class, 他...
今天带大家简单制作一张首页的画面。 导览列 选用Dektop(1440px X 1024px)的fr...
bower??? 什麽是 bower?? https://bower.io/ bower 为前端套...
因为工作的关系,在专案上接触到Material UI的Framework,也让我理解到为什麽这套UI...