一、场景
公司里各个部门的总经理
二、实质
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这种对象为“同事对象”。
我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星形结构。
三、示例
package com.lgd.mediator;
//同事类的接口
public interface Department {
void selfAction(); //做本部门的事情
void outAction(); //向总经理发出申请
}
package com.lgd.mediator;
/**
* 市场部
* @author liguodong
*
*/
public class Market implements Department{
private Mediator mediator;//持有中介者(总经理)的引用
public Market(Mediator mediator) {
super();
this.mediator = mediator;
mediator.register("market", this);
}
@Override
public void selfAction() {
// TODO Auto-generated method stub
System.out.println("跑去接项目!");
}
@Override
public void outAction() {
// TODO Auto-generated method stub
System.out.println("汇报工作!项目承接的进度,需要资金支持!");
mediator.command("finacial");
}
}
package com.lgd.mediator;
/**
* 开发部
* @author liguodong
*
*/
public class Development implements Department{
private Mediator mediator;//持有中介者(总经理)的引用
public Development(Mediator mediator) {
super();
this.mediator = mediator;
mediator.register("development", this);
}
@Override
public void selfAction() {
// TODO Auto-generated method stub
System.out.println("专心科研,开发项目!");
}
@Override
public void outAction() {
// TODO Auto-generated method stub
System.out.println("汇报工作!没钱了,需要资金支持!");
}
}
package com.lgd.mediator;
/**
* 财务部
* @author liguodong
*
*/
public class Finacial implements Department{
private Mediator mediator;//持有中介者(总经理)的引用
public Finacial(Mediator mediator) {
super();
this.mediator = mediator;
mediator.register("finacial", this);
}
@Override
public void selfAction() {
// TODO Auto-generated method stub
System.out.println("数钱");
}
@Override
public void outAction() {
// TODO Auto-generated method stub
System.out.println("汇报工作!钱太多了。。");
}
}
package com.lgd.mediator;
public interface Mediator {
void register(String dname,Department d);//登记某部门
void command(String name);//向某部门发出命令
}
package com.lgd.mediator;
import java.util.HashMap;
import java.util.Map;
/**
* 总经理
* @author liguodong
*
*/
public class President implements Mediator{
private Map<String, Department> map = new HashMap<String, Department>();
@Override
public void register(String dname, Department d) {
// TODO Auto-generated method stub
map.put(dname,d);
}
@Override
public void command(String dname) {
// TODO Auto-generated method stub
map.get(dname).selfAction();
}
}
package com.lgd.mediator;
public class Client {
public static void main(String[] args) {
Mediator mediator = new President();//总经理
//三个部门同一个总经理
Market market = new Market(mediator);
Development development = new Development(mediator);
Finacial finacial = new Finacial(mediator);
market.selfAction();
market.outAction();
}
}
运行结果:
跑去接项目!
汇报工作!项目承接的进度,需要资金支持和开发人员!
数钱
专心科研,开发项目!
四、开发场景
MVC模式(C、控制器:就是一个中介者。M和V都和他打交道)。
窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象。
图形界面开发GUI中,对个组件之间的交互,通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象。
Java.lang.reflect.Method#invoke()
原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/44080471
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~