【Java中23种面试常考的设计模式之中介者模式(Mediator)---行为型模式】

【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】

知识回顾:

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)—行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)—行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)—行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】。

中介者模式

中介者模式:用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

解决的问题

  1. 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂。
  2. 因为对象之前存在着复杂的关系,牵一发而动全身,所以我们需要抽离出来一个中介者类来对其它类进行灵活的调节。
  3. 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为"同事对象",我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星型结构。

生产开发中常用的使用场景

  1. MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

中介者模式优点与缺点

优点
  1. 降低了类的复杂度,将一对多转化成了一对一。
  2. 各个类之间的解耦。
  3. 符合迪米特原则。
缺点
  1. 中介者会庞大,变得复杂难以维护。

核心角色

Mediator 中介者接口、ConcreteMediator 中介者实现、Colleague同事类接口、ConcreteColleague同事实现类、客户端测试。

UML类图

在这里插入图片描述

实现代码

我们实现这样一个栗子:假设A、B、C同事分别负责不同的开发任务,如果没人领导他们,或者说没人给他们分发任务,他们在开发中就会存在一些冲突,这就需要一个中介者(领导者)对他们进行协调。

Mediator 中介者接口
package com.mediator;

public interface Mediator {
	
	void register(String cname,Colleague colleague);
	
	void command(String cname);
}
ConcreteMediator 中介者实现
package com.mediator;

import java.util.HashMap;
import java.util.Map;

public class ConcreteMediator  implements Mediator {
	
	private Map<String,Colleague> map = new HashMap<String , Colleague>();
	
	@Override
	public void command(String cname) {
		map.get(cname).develop();
	}

	@Override
	public void register(String cname, Colleague colleague) {
		map.put(cname, colleague);
	}
}
Colleague同事类接口
package com.mediator;

public interface Colleague {
	void develop(); //做自己负责的功能模块
	void report();  //向项目领导者汇报工作
}
ConcreteColleagueA同事实现类
package com.mediator;

public class ConcreteColleagueA implements Colleague {

	private Mediator m;  //持有中介者的引用
	
	public ConcreteColleagueA(Mediator m) {
		super();
		this.m = m;
		m.register("A", this);
	}

	@Override
	public void report() {
		System.out.println("我是A!我要汇报工作!");
		m.command("A");
	}

	@Override
	public void develop() {
		System.out.println("我是A,我负责前端功能开发!");
	}
}
ConcreteColleagueB同事实现类
package com.mediator;

public class ConcreteColleagueB implements Colleague {

	private Mediator m;  //持有中介者引用
	
	public ConcreteColleagueB(Mediator m) {
		super();
		this.m = m;
		m.register("B", this);
	}

	@Override
	public void report() {
		System.out.println("我是B!我要汇报工作!");
		m.command("B");
		
	}

	@Override
	public void develop() {
		System.out.println("我是B,我负责后端功能开发!");
	}
}
ConcreteColleagueC同事实现类
package com.mediator;

public class ConcreteColleagueC implements Colleague {

	private Mediator m;  //持有中介者的引用
	
	public ConcreteColleagueC(Mediator m) {
		super();
		this.m = m;
		m.register("C", this);
	}

	@Override
	public void report() {
		System.out.println("我是C!我要汇报工作!");
		m.command("C");
	}

	@Override
	public void develop() {
		System.out.println("我是C,我负责数据库设计!");
	}
}
客户端测试代码Client-Main
package com.mediator;

public class Main {
    public static void main(String[] args) {
		// 获取中介者对象
		Mediator m = new ConcreteMediator();
		// 获取同事对象,实例化的时候会在中介者对象中注册
		ConcreteColleagueA   colleagueA = new ConcreteColleagueA(m);
		ConcreteColleagueB   colleagueB = new ConcreteColleagueB(m);
        ConcreteColleagueC   colleagueC = new ConcreteColleagueC(m);
		
		
		colleagueA.report();

        colleagueB.report();

        colleagueC.report();
	}

}

运行结果展示:

在这里插入图片描述

好了,到这里【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】就结束了,23种设计模式持续更新汇总中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值