
一、适用场景:中介者模式提供了一个中介类来处理不同类之间的通信,降低各个类的相互耦合。比如同事之间的沟通,并不直接找对方,而是把消息发给项目管理者,由管理者去发送消息。
二、示例
1.创建抽象调停者类
package cn.edu.tju.app;
public abstract class Mediator {
public abstract void sendMessage(Colleague colleague,String name,String content);
public abstract void addColleague(Colleague colleague);
}
2.创建具体的调停者类,用一个map来保存所有同事
package cn.edu.tju.app;
import java.util.HashMap;
import java.util.Map;
public class ConcreteMediator extends Mediator{
private Map colleagueMap=new HashMap<>();
@Override
public void addColleague(Colleague colleague){
colleagueMap.put(colleague.getName(),colleague);
}
@Override
public void sendMessage(Colleague colleague, String name, String content) {
Colleague destination=colleagueMap.get(name);
if(destination!=null){
System.out.println("【调停者转发】"+content+"[from "+colleague.getName()+" to "+name+"]");
destination.receiveMessage(colleague.getName(),content);
}
}
}
3.创建抽象同事类,每个同事需要一个调停者属性
package cn.edu.tju.app;
public abstract class Colleague {
private String name;
protected Mediator mediator = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
public abstract void receiveMessage(String source,String content);
public abstract void sendMessage(String destination,String content);
}
4.创建具体同事类
package cn.edu.tju.app;
public class ConcreteColleague extends Colleague {
@Override
public void receiveMessage(String source,String content) {
System.out.println("【"+this.getName()+" 收到】 "+content+" [from "+source+"]");
}
@Override
public void sendMessage(String destination,String content) {
System.out.println("【"+this.getName()+"给调停者发送】 "+content+" [to "+destination+"]");
mediator.sendMessage(this,destination,content);
}
}
5.创建主类,进行测试:
package cn.edu.tju.app;
public class ColleagueTest {
public static void main(String[] args) {
Mediator mediator=new ConcreteMediator();
Colleague colleague1=new ConcreteColleague();
colleague1.setName("张三");
Colleague colleague2=new ConcreteColleague();
colleague2.setName("李四");
colleague1.setMediator(mediator);
colleague2.setMediator(mediator);
mediator.addColleague(colleague1);
mediator.addColleague(colleague2);
colleague1.sendMessage("李四","我需要一份帮助文档");
colleague2.sendMessage("张三","在服务器/root目录");
}
}
6.运行结果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)