中介者模式Mediator
- 中介者模式核心
- 如果一个系统中对戏那个之间的联系呈现为网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象”
- 我们可以引入一个中介对象,使各个同事对象只跟中介者对象打交道,将复杂的网状结构变为星状结构
中介者模式的本质
解耦多个同事对象之间的交互关系每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系
模拟公司各部
package studyGFO;
public interface Mediator {
void register(String dname,Department d);
void command(String dname);
}
package studyGFO;
import java.util.HashMap;
import java.util.Map;
public class President implements Mediator{
private Map<String, Department> map = new HashMap<>();
@Override
public void register(String dname, Department d) {
map.put(dname, d);
}
@Override
public void command(String dname) {
map.get(dname).selfAction();
}
}
package studyGFO;
/**
* 同事类
* @author http://blog.csdn.net/thewaiting
*
*/
public interface Department {
void selfAction();//做本部门的事
void outAction();//向总经理发出申请
}
package studyGFO;
/**
* 开发部
* @author http://blog.csdn.net/thewaiting
*
*/
public class Development implements Department{
private Mediator m;//持有中介者(总经理)的引用
public Development(Mediator m) {
super();
this.m = m;
m.register("development", this);
}
@Override
public void selfAction() {
System.out.println("开发项目");
}
@Override
public void outAction() {
System.out.println("汇报工作");
}
}
package studyGFO;
/**
* 财务部
* @author http://blog.csdn.net/thewaiting
*
*/
public class Finacial implements Department{
private Mediator m;//持有中介者(总经理)的引用
public Finacial(Mediator m) {
super();
this.m = m;
m.register("finacial", this);
}
@Override
public void selfAction() {
System.out.println("发钱");
}
@Override
public void outAction() {
System.out.println("汇报数钱");
}
}
package studyGFO;
/**
* 市场部
* @author http://blog.csdn.net/thewaiting
*
*/
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("finacial");
}
}
package studyGFO;
public class Client {
public static void main(String[] args) {
Mediator m = new President();
Market market = new Market(m);
Development development = new Development(m);
Finacial finacial = new Finacial(m);
market.selfAction();
market.outAction();
}
}
运行结果
买东西
汇报买东西
数钱
开发中场景
MVC模式(其中C,控制器就是一个中介者对象。M和V都和他打交道)
窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象
图形界面开发GUI中,多个组件之间的交互,可以通过引用一个中介者对象来解决,可以是整体对象或者DOM对象
Java.lang.reflect.Method#invoke()