三、设计模式
14.中介者模式(Mediator Pattern)
14.1 定义
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
14.2 角色
- Mediator: 抽象中介者
- ConcreteMediator: 具体中介者
- Colleague: 抽象同事类
- ConcreteColleague: 具体同事类
14.3 结构图
14.4 代码实现
中介者接口
public interface Mediator {
void register(String dname,Department d);
void command (String dname);
}
中介者实现类
public class President implements Mediator {
private HashMap<String, Department> map = new HashMap<String,Department>();
[@Override](https://my.oschina.net/u/1162528)
public void register(String dname, Department d) {
map.put(dname, d);
}
[@Override](https://my.oschina.net/u/1162528)
public void command(String dname) {
map.get(dname).selfAction();
}
}
各职位
public class Development implements Department {
private Mediator m;
public Development(Mediator m) {
super();
this.m = m;
m.register("development ", this);
}
[@Override](https://my.oschina.net/u/1162528)
public void selfAction() {
System.out.println("开发产品");
}
[@Override](https://my.oschina.net/u/1162528)
public void outAction() {
System.out.println("开发汇报");
}
}
public class Financial implements Department {
private Mediator m;
public Financial(Mediator m) {
super();
this.m = m;
m.register("financial", this);
}
[@Override](https://my.oschina.net/u/1162528)
public void selfAction() {
System.out.println("财务部工作");
}
@Override
public void outAction() {
System.out.println("财务汇报");
}
}
public class Market implements Department{
private Mediator m;
public Market(Mediator m) {
super();
this.m = m;
m.register("market", this);
}
@Override
public void selfAction() {
System.out.println("市场部业务");
}
@Override
public void outAction() {
System.out.println("市场部汇报工作");
m.command("financial");
}
}
测试类
class Test {
@org.junit.jupiter.api.Test
void test() {
Mediator m = new President();
Market market = new Market(m);
Development development = new Development(m);
Financial financial = new Financial(m);
market.selfAction();
market.outAction();
}
}
控制台输出
14.5 优点
- 简化了对象之间的交互。
- 解耦。
- 减少子类生成。
- 可以简化各同事类的设计和实现。
14.6 缺点
- 可能会导致具体中介者类非常复杂,使得系统难以维护。