设计模式:12、中介者模式
目录
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