设计模式:12、中介者模式

目录

0、定义

1、中介者模式的四种角色

2、中介者模式的UML类图

3、示例代码


0、定义

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

1、中介者模式的四种角色

  • 中介者(Mediator):中介者 是一个接口,该接口定义了用于同事(colleague)对象之间进行通信的方法。
  • 具体中介者(ConcreteMediator):具体中介者 是实现中介者 接口的类。具体中介者 需要包含所有具体同事 (ConcreteColleague)的引用,并通过实现中介者 接口中的方法来满足具体同事之间的通信请求。
  • 同事(Colleague):一个接口,规定了具体同事需要实现的方法。
  • 具体同事(ConcreteColleague):实现同事 接口的类。具体同事 需要包含具体中介者 的引用,一个具体同事 需要和其他具体同事 交互时,只需将自己的请求通知给它所包含的具体中介者即可。

2、中介者模式的UML类图

3、示例代码

同事

java 复制代码
package xyz.jangle.design.mediator;
/**
 * 同事
 * @author Administrator
 *
 */
public interface Colleague {
	/**
	 * 发送消息
	 * @param mess
	 */
	public void giveMess(String mess);
	/**
	 * 接收消息
	 * @param mess
	 */
	public void receiverMess(String mess);

}

中介者

java 复制代码
package xyz.jangle.design.mediator;
/**
 * 中介者
 * @author Administrator
 *
 */
public interface Mediator {
	/**
	 * 注册同事
	 * @param colleague
	 */
	public void registerColleague(Colleague colleague);
	/**
	 * 传递消息
	 * @param colleague
	 * @param mess
	 */
	public void deliverMess(Colleague colleague,String mess);

}

具体中介者

java 复制代码
package xyz.jangle.design.mediator;

import java.util.ArrayList;
import java.util.List;
/**
 * 具体中介者
 * @author Administrator
 *
 */
public class ConcreteMediator implements Mediator{
	List<Colleague> list = new ArrayList<Colleague>();
	
	@Override
	public void registerColleague(Colleague colleague) {
		list.add(colleague);
	}

	@Override
	public void deliverMess(Colleague colleague, String mess) {
		for(Colleague coll:list) {
			if(coll != colleague) {	//排除自己
				coll.receiverMess(mess);
			}
		}
	}
	
	

}

具体同事1

java 复制代码
package xyz.jangle.design.mediator;
/**
 * 具体同事
 * @author Administrator
 *
 */
public class ConcreteColleague1 implements Colleague {
	
	Mediator mediator;

	public ConcreteColleague1(Mediator mediator) {
		super();
		this.mediator = mediator;
		mediator.registerColleague(this);
	}

	@Override
	public void giveMess(String mess) {
		mediator.deliverMess(this, mess);
	}

	@Override
	public void receiverMess(String mess) {
		System.out.println("ConcreteColleague1收到消息:"+mess);
	}
	
	

}

具体同事2

java 复制代码
package xyz.jangle.design.mediator;
/**
 * 具体同事
 * @author Administrator
 *
 */
public class ConcreteColleague2 implements Colleague {
	
	Mediator mediator;

	public ConcreteColleague2(Mediator mediator) {
		super();
		this.mediator = mediator;
		mediator.registerColleague(this);
	}

	@Override
	public void giveMess(String mess) {
		mediator.deliverMess(this, mess);
	}

	@Override
	public void receiverMess(String mess) {
		System.out.println("ConcreteColleague2收到消息:"+mess);
	}

}

客户端(使用)

java 复制代码
package xyz.jangle.design.mediator;

public class AppMain12 {

	public static void main(String[] args) {
		
		Mediator mediator = new ConcreteMediator();	//创建具体中介者
		Colleague colleague1 = new ConcreteColleague1(mediator);	//创建同事1
		Colleague colleague2 = new ConcreteColleague2(mediator);	//创建同事2
		colleague1.giveMess("hello 123");	//同事1发送消息给其他同事
		colleague2.giveMess("hello 321");	//同事2发送消息给其他同事

	}

}

执行结果

bash 复制代码
ConcreteColleague2收到消息:hello 123
ConcreteColleague1收到消息:hello 321
相关推荐
踩着两条虫2 小时前
「AI + 低代码」的可视化设计器
开发语言·前端·低代码·设计模式·架构
蜡笔小马15 小时前
11.设计模式实战:从创建型到结构型的全面解析
设计模式
蜡笔小马15 小时前
09.C++设计模式-外观模式
c++·设计模式·外观模式
workflower15 小时前
AI能源智慧生产与绿色开发核心场景
大数据·人工智能·设计模式·机器人·软件工程·能源
蜡笔小马16 小时前
10.C++设计模式-代理模式
c++·设计模式·代理模式
雪度娃娃16 小时前
行为型设计模式——职责链模式
c++·设计模式·责任链模式
多加点辣也没关系1 天前
设计模式-观察者模式
观察者模式·设计模式
hssfscv1 天前
软件设计师下午题训练1-3题+2019上上午题错题解析 练习真题训练13
笔记·设计模式·uml
拾-光1 天前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
多加点辣也没关系1 天前
设计模式-模板方法模式
设计模式·模板方法模式