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

发布于:2024-11-29 ⋅ 阅读:(27) ⋅ 点赞:(0)

目录

0、定义

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

2、中介者模式的UML类图

3、示例代码


0、定义

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

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

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

2、中介者模式的UML类图

3、示例代码

同事

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

}

中介者

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);

}

具体中介者

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

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

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);
	}

}

客户端(使用)

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发送消息给其他同事

	}

}

执行结果

ConcreteColleague2收到消息:hello 123
ConcreteColleague1收到消息:hello 321