设计模式之中介者模式
定义
调停者模式(中介者模式)是软件设计模式的一种,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。—— [ 百度百科 ]
解释说明
在中介者模式中,中介者的存在,主要是为了处理对象与对象之间复杂的关系。如果对象与对象之间的关联关系由自身去维护,那么当对象数量庞大的时候,他们之间的关系势必形成错综复杂的网状结构,这无疑增加了代码的复杂度以及理解上的难度。所以,就需要中介者的出现,讲对象与对象之间的联动关系交由中介者处理,大大的减轻了对象自身的代码复杂度。
代码块
//中介者模式
public class Test {
//抽象中介者
abstract class AbstractMediator{
public People man;
public People women;
public void manDo(int age) {
}
public void womenDo(int age) {
}
}
//具体实现中介者
class MediatorA extends AbstractMediator{
public MediatorA(People man, People women){
this.man = man;
this.women = women;
}
@Override
public void manDo(int age) {
man.setAge(age + 5);
}
@Override
public void womenDo(int age) {
women.setAge(age - 5);
}
}
//人
class People{
public int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//男人
class Man extends People{
public void setAge(int age, AbstractMediator mediator) {
this.age = age;
mediator.womenDo(age);
}
}
//女人
class Women extends People{
public void setAge(int age, AbstractMediator mediator) {
this.age = age;
mediator.manDo(age);
}
}
//测试
public static void main(String[] args) {
Man man = new Test().new Man();
Women women = new Test().new Women();
AbstractMediator mediatorA = new Test().new MediatorA(man, women);
man.setAge(30, mediatorA);
System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge());
women.setAge(40, mediatorA);
System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge());
}
}
: 以上就是中介者模式的完整代码。首先,我们抽象出中介者父类,在其中定义了相互关系的对象,并且声明了对象之间发生变化的时候需要作出反应的方法manDo,womenDo,子类则是实现这两个方法。在上述代码中男人和女人之间的关系是:男人的年龄总是比女人的大5岁,于是当男人年龄变化时,相应的女人的年龄也发生变化,反之亦然。
总结
优点
- 降低了类的复杂度,将一对多转化成了一对一。
- 各个类之间的解耦。
- 符合迪米特原则。
缺点
- 中介者会庞大,变得复杂难以维护。
试用场景
- 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。