设计模式之中介者模式

三、设计模式

14.中介者模式(Mediator Pattern)

14.1 定义

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

14.2 角色

  • Mediator: 抽象中介者
  • ConcreteMediator: 具体中介者
  • Colleague: 抽象同事类
  • ConcreteColleague: 具体同事类

14.3 结构图

14.4 代码实现

中介者接口
public interface Mediator {

	void register(String dname,Department d);

	void command (String dname);

}
中介者实现类
public class President implements Mediator {

	private HashMap<String, Department> map = new HashMap<String,Department>();

	[@Override](https://my.oschina.net/u/1162528)
	public void register(String dname, Department d) {
		map.put(dname, d);
	}

	[@Override](https://my.oschina.net/u/1162528)
	public void command(String dname) {
		map.get(dname).selfAction();

	}

}
各职位
public class Development implements Department {

	private Mediator m;


	public Development(Mediator m) {
		super();
		this.m = m;
		m.register("development ", this);
	}

	[@Override](https://my.oschina.net/u/1162528)
	public void selfAction() {
		System.out.println("开发产品");

	}

	[@Override](https://my.oschina.net/u/1162528)
	public void outAction() {
	System.out.println("开发汇报");

	}

}
public class Financial implements Department {

	private Mediator m;

	public Financial(Mediator m) {
		super();
		this.m = m;
		m.register("financial", this);
	}

	[@Override](https://my.oschina.net/u/1162528)
	public void selfAction() {
		System.out.println("财务部工作");
	}

	@Override
	public void outAction() {
		System.out.println("财务汇报");

	}

}
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("financial");

	}

}
测试类
class Test {

	@org.junit.jupiter.api.Test
	void test() {
		Mediator m = new President();
		Market market = new Market(m);
		Development development = new Development(m);
		Financial financial = new Financial(m);
		market.selfAction();
		market.outAction();
	}

}
控制台输出

14.5 优点

  • 简化了对象之间的交互。
  • 解耦。
  • 减少子类生成。
  • 可以简化各同事类的设计和实现。

14.6 缺点

  • 可能会导致具体中介者类非常复杂,使得系统难以维护。

转载于:https://my.oschina.net/tcwong/blog/3052406

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值