美文网首页
Android设计模式-中介者模式

Android设计模式-中介者模式

作者: 星宇V | 来源:发表于2019-11-04 20:31 被阅读0次

UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式

1.定义

用一个中介者对象封装一系列的对象交互,中介者可以使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

2.中介者模式UML图

中介者模式UML图

角色介绍

  • Mediator 抽象中介者角色,定义统一的接口,用于各同时角色之间的交互
  • ConcreteMediator 具体中介者角色,具体中介者角色通过协调同事角色实现交互,因此,必须持有同事角色的引用。
  • Colleague 同事角色,每一个同事角色,都需要直到中介者角色,并且不同同事角色之间的交互通信,需要通过中介者角色进行。每个同事者角色,都有两种行为,一种是自发行为,一种是依赖方法。自发行为表示不需要中介者角色可以自己完成相应逻辑的方法。依赖方法是指必须通过中介者才能完成的方法。

3.简单实现

3.1抽象中介者角色

public abstract class Mediator {
    private ConcreteColleague1 concreteColleague1;
    private ConcreteColleague2 concreteColleague2;

    public ConcreteColleague1 getConcreteColleague1() {
        return concreteColleague1;
    }

    public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
        this.concreteColleague1 = concreteColleague1;
    }

    public ConcreteColleague2 getConcreteColleague2() {
        return concreteColleague2;
    }

    public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
        this.concreteColleague2 = concreteColleague2;
    }
    public abstract void method1();

    public abstract void method2();
}

3.2具体中介者角色

public class ConcreteMediator extends Mediator {
    @Override
    public void method1() {
        super.getConcreteColleague1().doSelf();
        super.getConcreteColleague2().doSelf();
    }

    @Override
    public void method2() {
        super.getConcreteColleague1().doSelf();
        super.getConcreteColleague2().doSelf();
    }
}

3.3同事角色

public abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
}

3.4具体同事角色

public class ConcreteColleague1 extends Colleague {

    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

    public void doSelf(){
        /**
         * 可以自己完成的操作
         */
        System.out.println("具体同时角色1的自己方法————");
    }

    public void doDep(){
        super.mediator.method1();
    }
}


public class ConcreteColleague2 extends Colleague {

    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

    public void doSelf(){
        /**
         * 可以自己完成的操作
         */
        System.out.println("具体同时角色2的自己方法————");
    }

    public void doDep(){
        super.mediator.method2();
    }

}

3.5客户端调用

public class MyClass {
    public static void main(String args[]) {
        Mediator mediator=new ConcreteMediator();
        ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);

        mediator.setConcreteColleague1(colleague1);
        mediator.setConcreteColleague2(colleague2);

        colleague1.doDep();
    }
}

打印结果

具体同时角色1的自己方法————
具体同时角色2的自己方法————

如例子中所写,具体同事角色继承自同事角色抽象类,同事角色中传入中介者角色进行初始化,当调用具体同事角色当相应方法时,通过调用中介角色当方法,完成不同具体同事角色间当通信。

4.总结

优点

  • 中介者模式优点就是减少了类间当依赖,同时降低类类间当耦合

缺点

  • 中介者模式将原来一对多模式改为了中介者和同事类的依赖,同事类越多的时候,中介者的逻辑就会越复杂。。

在面向对象编程中,一个类必然会和多个类有联系,当这种一对多的联系过于复杂的时候,可以考虑使用中介者模式来进行解耦,但是不复杂的时候,使用中介者模式,反而会看起来更麻烦。。。具体程度看具体情况了

相关文章

网友评论

      本文标题:Android设计模式-中介者模式

      本文链接:https://www.haomeiwen.com/subject/zjmdbctx.html