核心
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象成为“同事对象”
本质
解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系
优点
- 1.通过让对象彼此解耦,增加对象的复用性
- 2.通过将控制逻辑集中,可以简化系统维护
- 3.通过中介者使一对多编程了一对一,便于理解
缺点
1.如果涉及不好,引入中介者会使程序变的复杂
2.中介者承担过多责任,维护不好会出大事
package com.yishan.mediator; /** * 抽象中介者 * @author : yishan * @date : 2020-09-07 19:08 */ public interface Mediator { /** *与部门建立关联 * @param dname 部门的名称 * @param d 同事类的接口 */ void register(String dname,Department d); /** * 向下面的同事发达命令 * @param dname */ void command(String dname); }
package com.yishan.mediator;
/**
* 同事类的接口
* @author : yishan
* @date : 2020-09-07 19:11
*/
public interface Department {
/**
* 做本部门的事情
*/
void selfAction();
/**
* 向总经理发出申请
*/
void outAction();
}
package com.yishan.mediator;
/**
* 研发部
* @author : yishan
* @date : 2020-09-07 19:13
*/
public class Development implements Department{
private Mediator m; //持有中介者(总经理)的引用
public Development(Mediator m) {
this.m = m;
m.register("development",this);
}
@Override
public void selfAction() {
System.out.println("专心科研,开发项目!");
}
@Override
public void outAction() {
System.out.println("汇报工作!或者需要资金支持!");
m.command("finacial");
}
}
package com.yishan.mediator;
/**
* 财务部
* @author : yishan
* @date : 2020-09-07 19:17
*/
public class Finacial implements Department {
private Mediator m; //持有中介者(总经理)的引用
public Finacial(Mediator m) {
this.m = m;
m.register("finacial",this);
}
@Override
public void selfAction() {
System.out.println("我在数钱,做账!");
}
@Override
public void outAction() {
System.out.println("汇报工作!还剩这么多钱!");
}
}
package com.yishan.mediator;
/**
* 市场部
* @author : yishan
* @date : 2020-09-07 19:17
*/
public class Market implements Department {
private Mediator m; //持有中介者(总经理)的引用
public Market(Mediator m) {
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 com.yishan.mediator;
import java.util.HashMap;
import java.util.Map;
/**
* 具体中介者(总经理)
* @author : yishan
* @date : 2020-09-07 19:23
*/
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 com.yishan.mediator;
/**
* 测试
* @author : yishan
* @date : 2020-09-07 19:30
*/
public class Client {
public static void main(String[] args) {
Mediator m = new President();
Market market = new Market(m);
Department devp = new Development(m);
Finacial f = new Finacial(m);
//market.selfAction();
//market.outAction();
devp.outAction();
}
}