Java设计模式DesignParttern

设计模式之中介者模式

2018-01-18  本文已影响2383人  爱红旗渠

中介者模式(Mediator), 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

适用场景

  1. 一组定义良好的对象,现在要进行复杂的通信。
  2. 定制一个分布在多个类中的行为,而又不想生成太多的子类。

优点

  1. 降低了系统对象之间的耦合性,使得对象易于独立的被复用。
  2. 提高系统的灵活性,使得系统易于扩展和维护。

缺点

中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。

UML结构图

Mediator Pattern

源码

抽象中介者

public interface Mediator {

    public void send(Colleague colleague, String message);

}

具体中介者类

public class ConcreteMediator implements Mediator {

    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;

    public void setColleague1(ConcreteColleague1 colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(ConcreteColleague2 colleague2) {
        this.colleague2 = colleague2;
    }

    @Override
    public void send(Colleague colleague, String message) {
        if (colleague == colleague1) {
            colleague2.notify(message);
        } else {
            colleague1.notify(message);
        }
    }

}

抽象同事类

public abstract class Colleague {

    protected Mediator mediator;

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

具体同事对象1

public class ConcreteColleague1 extends Colleague {

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

    public void send(String message) {
        mediator.send(this, message);
    }

    public void notify(String message) {
        System.out.println(getClass().getSimpleName() + " get message : " + message);
    }

}

具体同事对象2

public class ConcreteColleague2 extends Colleague {

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

    public void send(String message) {
        mediator.send(this, message);
    }

    public void notify(String message) {
        System.out.println(getClass().getSimpleName() + " get message : " + message);
    }
}

客户端调用
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地
相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

public class Client {

    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("吃饭了吗?");
        colleague2.send("没有呢,你要请客?");

    }

}

源码

源码地址: https://github.com/jingle1267/OriginBlog
源文地址 http://ihongqiqu.com/2016/09/18/Mediator-Pattern/

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式
上一篇 下一篇

猜你喜欢

热点阅读