JAVA设计模式之中介模式
概念:
中介模式(mediator):如果一个系统中对象之间是网状结构的,多对多的关系,会导致系统极其复杂,此时可以引入一个中介者对象,负责各个对象的协调,即各个对象只跟中介者打交道,这样负责网络结构就转化为星状结构。
类图
应用
- MVC模式中的C,控制器就是一个中介者对象。M和V都和他打交道。
- 窗口游戏程序,窗口软件开发中窗口也是一个中介者对象。
- 图像界面开发GUI,对个组件之间的交互,可以通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象
- java.lang.reflect.Method#invoke()De
代码
Mediator接口:
public interface Mediator {
void register(String name, Department department);
void commond(String departmentName);
}
具体中介者:
public class President implements Mediator {
private Map<String, Department> departmentMap = new HashMap<>();
@Override
public void register(String name, Department department) {
this.departmentMap.put(name, department);
}
@Override
public void commond(String departmentName) {
Department d = this.departmentMap.get(departmentName);
d.outAction();
}
}
部门接口:
public interface Department {
void selfAction();
void outAction();
}
具体部门:
public class Development implements Department {
private Mediator mediator;
private String name;
public Development(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
mediator.register(name, this);
}
@Override
public void selfAction() {
System.out.println(name + " coding");
}
@Override
public void outAction() {
System.out.println(name + " server is over, need new server");
mediator.commond("financial");
}
}
public class Financial implements Department {
private Mediator mediator;
private String name;
public Financial(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
mediator.register(name, this);
}
@Override
public void selfAction() {
System.out.println(name + " manage money. get money");
}
@Override
public void outAction() {
System.out.println(name + " send monney");
}
}
public class Market implements Department {
private Mediator mediator;
private String name;
public Market(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
mediator.register(name, this);
}
@Override
public void selfAction() {
System.out.println(name + "sold production.");
}
@Override
public void outAction() {
System.out.println(name + "plan a activity, need money");
mediator.commond("financial");
}
}
客户端调用:
public class Main {
public static void main(String[] args) {
President president = new President();
Development development = new Development(president, "development");
Financial financial = new Financial(president, "financial");
Market market = new Market(president, "market");
development.selfAction();
development.outAction();
}
}
总结
中介者模式的本质是解耦各个同时对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象同意管理这些交互关系。