在我们开发的过程中,一个类肯定会与其他类产生依赖关系,如果这个依赖关系如网状般复杂,那么就会导致代码的耦合度很高。
提到中介,我们第一个应该想到的就是租房中介,那么我们就以租房中介来介绍中介者模式:假设有n个人想要租房,共找到m个房主,假设每一个人都把m个房子都看完再决定租哪个,那么整个系统共有(m* n)种依赖关系,这时我们引入一个租房中介,他负责与每个人和每个屋主交互,那么,这时就只有(m + n)种依赖关系,且所有的依赖关系都是和中介的依赖。( m + n < m * n m和n都为正整数,通过解不等式可以清楚的知道 当 m >= 1 n >= 2 的时候这种优势恒存在)
所以,很明显的,为了减少不同类之间的强耦合关系,我们将一系列对象的相互作用包装起来,形成了中介者。
中介者的简单实例如下所示:
// 中介者
public class Mediator {
classA A;
classB B;
public void setA(classA A) { this.A = A };
public void setB(classB B) { this.B = B };
public void changed(class temp) {
if (temp == classA) { B.method(); } else { A.method(); }
}
}
// 抽象同事类
public class Colleague {
protected Mediator mediator;
// 注意:同事类必须要持有中介类的引用,你要租房子,不知道中介怎么行呢?
public Colleague(Mediator mediator) { this.mediator = mediator }
}
// 具体同事类 A
public class classA extends Colleague {
public A(Mediator mediator) { super(); }
public void doSth1() { this.mediator.changed(this); }
}
// 具体同事类 B
public class classB extends Colleague {
public B(Mediator mediator) { super(); }
public void doSth2() { this.mediator.changed(this); }
}
// A doSth1
public class test {
Mediator mediator = new Mediator();
classA A = new A(mediator);
classB B = new B(mediator);
mediator.setA(A);
mediator.setB(B);
A.doSth1(); // 会执行B.doSth2
}
从以上的代码中我们可以看出,A和B有交互,但是A和B并不知道彼此,它们只和中介交互,这样A和B之间就没有强耦合关系了。