前言:
(昨天做了几个俯卧撑搞得现在浑身酸疼o(╥﹏╥)o)
中介者模式可以看成在公司中,财务部和市场部、研发部等部门,如果没有总经理的话,那么这些部门就需要相互打交道,就形成了n:n的关系,那么这样的关系就会变得很复杂
但是如果有了总经理(作为中介者),那他们只需要跟总经理打交道就可以了,总经理叫他发钱,那他就发钱,也不用问给谁发钱
目录
一、代码实现:
一、类图
二、具体代码实现
Department:
public interface Department {
void selfaction();//做本部门的事情
void outaction();//向总经理发出申请
}
Development:
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 自动生成的方法存根
System.out.print("专心科研,开发项目");
}
//需求
@Override
public void outaction() {
// TODO 自动生成的方法存根
System.out.println("汇报工作没钱了,快给钱");
}
}
Finance:
package mediator;
//金融部
public class Finance implements Department{
private Mediator mediator;//经理老哥
public Finance(Mediator mediator) {
super();
this.mediator = mediator;
mediator.register("Finance", this);
}
@Override
public void selfaction() {
// TODO 自动生成的方法存根
System.out.print("数钱");
}
@Override
public void outaction() {
// TODO 自动生成的方法存根
System.out.println("钱太多了,该咋花");
}
}
Market:
//市场部
public class Maket implements Department{
private Mediator mediator;
public Maket(Mediator mediator) {
super();
this.mediator = mediator;
mediator.register("Maket", this);
}
@Override
public void selfaction() {
// TODO 自动生成的方法存根
System.out.print("跑去接项目");
}
@Override
public void outaction() {
// TODO 自动生成的方法存根
System.out.println("没钱了,没钱吃饭了");
mediator.command("Finance");
}
}
Mediator:
public interface Mediator {
void register(String dname,Department d);//我下面有谁
void command (String name);//部门的需求是什么
}
President:
import java.util.HashMap;
import java.util.Map;
public class President implements Mediator {
private Map<String , Department>map=new HashMap<String, Department>();
@Override
public void register(String dname, Department d) {
// TODO 自动生成的方法存根
//添加相关部门到自身集合中
map.put(dname, d);
}
@Override
public void command(String name) {
// TODO 自动生成的方法存根
//找打相关部门处理事务
map.get(name).selfaction();
}
}
Client:
public class Client {
public static void main(String[] args) {
Mediator mediator=new President();
Maket maket=new Maket(mediator);
Development development=new Development(mediator);
Finance finance=new Finance(mediator);
maket.outaction();
}
}
实现结果:
二、本质
核心:
如果一个系统中的对象之间的联系呈现为网状结构,对象之间存在大量的多对多的关系,将导致关系极其复杂,这些对象成为同事对象
我们可以引入一个中介者对象,使得各个同事对象只跟中介者对象打交道,将复杂的网络结构化为如下的星型结构
中介者模式的本质:
解耦多个同事对象之间的交互关系,每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系
三、应用
MVC模式(其中的c,控制器就是一个中介者对象,M和V都和他 打交道)
窗口游戏程序,窗口软件开发窗口对象也是一个中介者对象
图形界面开发GUI中,多个组件之间的交互,可以通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象
java.lang.reflect.Method#invoke();