一、适用场景:中介者模式提供了一个中介类来处理不同类之间的通信,降低各个类的相互耦合。比如同事之间的沟通,并不直接找对方,而是把消息发给项目管理者,由管理者去发送消息。
二、示例
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 MapcolleagueMap=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条)