【设计模式Android】中介者模式

设计模式Android 其余相关文章:
【设计模式Android】设计模式六大原则
【设计模式Android】代理模式javascript


定义:定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不须要显示地相互引用,从而使其耦合性松散,并且能够独立地改变他们之间的交互。java

中介者模式

中介者模式简介

我在网上看到这样一张图,我以为可以很好地说明中介者模式,因此我先借来用用。设计模式


这是班里同窗之间的联系状况。几乎每一个人之间都有联系,错综复杂,每一个人之间均可以单独联系的。
可是QQ群诞生了,你们的关系就能够成为这样了:


经过QQ群把你们联系在一块儿,而各我的之间是没有联系的。
这样作好吗?
若是是现实生活固然不方便,你们之间都有私人的联系多方便。可是对于程序设计来讲,就是太好的事了,由于根据以前提到过的六大原则,类与类之间的耦合性越低越好。若是咱们经过一个QQ群下降了你们之间的联系,不就是下降了耦合。

代码示例

废话很少说,我先创建一个QQ(中介者)。ide

public abstract class AbstractMediator {
    public StudentA studentA;
    public StudentB studentB;
    public StudentC studentC;
    public AbstractMediator(){
        studentA = new StudentA(this);
        studentB = new StudentB(this);
        studentC = new StudentC(this);

    }

    public StudentA getStudentA() {
        return studentA;
    }

    public StudentB getStudentB() {
        return studentB;
    }

    public StudentC getStudentC() {
        return studentC;
    }

    public abstract void talk();
}复制代码

实现:post

public class Mediator extends AbstractMediator{
    @Override
    public void talk() {
        studentA.talk();
        studentB.talk();
        studentC.talk();
    }
}复制代码

先抽象一个学生类:ui

public abstract class AbstractStudent {
    public String name;
    public String content;
    public AbstractMediator mediator;
    public AbstractStudent(AbstractMediator mediator){
        this.mediator = mediator;
    }
    public abstract void talk();
}复制代码

而后创建几个学生StudentA,B,C,BC与A同样,我这里就写一个便可:this

public class StudentA extends AbstractStudent{


    public StudentA(AbstractMediator mediator) {
        super(mediator);
        name ="aaa";
        content = "hello";
    }

    @Override
    public void talk() {
        System.out.printf(name+"对"+mediator.getStudentB().name+"说:"+content);
    }
}复制代码

与代理模式的对比

当中介者中管理的类少的时候,总感受有些像代理模式,这实际上是因为中介者模式是下降一些类之间耦合性,当只下降两个类的耦合性时,写法上跟代理模式就差很少了,可是基本思想仍是不同的。
中介者模式中各个类之间是平级的,StudentA,StudentB等,可是代理模式不是,其实解耦的两个类应该是调用关系。spa

中介者模式的优缺点

中介者模式优势不言而喻,下降耦合性,可是缺点就是会使程序变得臃肿,逻辑复杂。设计

相关文章
相关标签/搜索