一,中介者模式
中介者模式:
- 用一个中介对象来封装一系列的对象交互,中介者使得各个对象不需要显示的相互调用,从而使其耦合松散,而且可以独立的改变他们之间的交互,使得代码易于维护;
- MVC模式中,C(controller)就是M(modle)和V(view)的中介者,使得前后端得以解耦;
二,原理类图
意图: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
适用性:
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。想定制一个分布在多个类中的行为,而又不想生成太多的子类。
三,实例
Mediator(抽象中介者): 用于定义同事对象到中介者对象的接口;
package com.neei.mediator;
/**
* @param
* @Author: AaNeei
* @Date: 2019/10/15 22:59
* @Description: 游学网
* @throws:
*/
public abstract class Mediator {
/**
* 获取消息,获取具体同事对象发出的消息
* @param stateChange
* @param name
*/
abstract void getMessage(int stateChange, String name);
/**
* 注册中介者
* @param colleagueName
* @param colleague
*/
abstract void register(String colleagueName, Colleague colleague);
abstract void sendMessage();
}
ConcreteMediator(具体中介者): 实现抽象中介者,需要得到所有的同事类,以HashMap来管理,并接受某个同事对象的消息完成相应的任务;
package com.neei.mediator;
import java.util.HashMap;
import java.util.Map;
/**
* @param
* @Author: AaNeei
* @Date: 2019/10/15 23:08
* @Description: 游学网
* @throws:
*/
public class ConcreteMediator extends Mediator {
private Map<String, Colleague> colleagueMap = new HashMap<>();
private Map<String, String> interMap = new HashMap<>();
@Override
void register(String colleagueName, Colleague colleague) {
colleagueMap.put(colleagueName, colleague);
if (colleague instanceof Alarm) {
interMap.put("Alarm", colleagueName);
} else if (colleague instanceof CoffeeMachine) {
interMap.put("CoffeeMachine", colleagueName);
} else if (colleague instanceof TV) {
interMap.put("TV", colleagueName);
} else if (colleague instanceof Curtains) {
interMap.put("Curtains&