Android设计模式-中介者模式

2019-11-04  本文已影响0人  星宇V

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图

角色介绍

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.总结

优点

缺点

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

上一篇 下一篇

猜你喜欢

热点阅读