您的位置:首页 > 其它

简说中介者模式

2018-02-23 10:27 113 查看

设计模式之中介者模式

定义

调停者模式(中介者模式)是软件设计模式的一种,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。—— [ 百度百科 ]

解释说明

在中介者模式中,中介者的存在,主要是为了处理对象与对象之间复杂的关系。如果对象与对象之间的关联关系由自身去维护,那么当对象数量庞大的时候,他们之间的关系势必形成错综复杂的网状结构,这无疑增加了代码的复杂度以及理解上的难度。所以,就需要中介者的出现,讲对象与对象之间的联动关系交由中介者处理,大大的减轻了对象自身的代码复杂度。

代码块

//中介者模式
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岁,于是当男人年龄变化时,相应的女人的年龄也发生变化,反之亦然。

总结

优点

降低了类的复杂度,将一对多转化成了一对一。

各个类之间的解耦。

符合迪米特原则。

缺点

中介者会庞大,变得复杂难以维护。

试用场景

系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。

想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息