中介者模式(Mediator), 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
适用场景
- 一组定义良好的对象,现在要进行复杂的通信。
- 定制一个分布在多个类中的行为,而又不想生成太多的子类。
优点
- 降低了系统对象之间的耦合性,使得对象易于独立的被复用。
- 提高系统的灵活性,使得系统易于扩展和维护。
缺点
中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。
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/
设计模式系列:
创建型 | 结构型 | 行为型 |
---|---|---|
工厂方法 简单工厂 抽象工厂 建造者模式 单例模式 原型模式 |
组合模式 外观模式 桥接模式 代理模式 享元模式 适配器模式 装饰模式 |
策略模式 模板方法 状态模式 观察者模式 备忘录模式 迭代器模式 命令模式 职责链模式 解释器模式 访问者模式 中介者模式 |
网友评论