/** * 同事抽象类 */ public abstract class Colleague { //中介者抽象类 protected Mediator mediator; //接受消息 public abstract void receive(); //发送消息 public abstract void send(); public void setMediator(Mediator mediator) { this.mediator = mediator; } } /** * 中介者抽象类 */ public abstract class Mediator { //注册同事 abstract void register(Colleague colleague); //通知中介者,发送消息 abstract void relay(Colleague colleague); } /*** * 中介者实现类 */ public class ConcreteMediator implements Mediator { /** * 被中介者代理的同事 */ private List<Colleague> colleagues; public ConcreteMediator() { colleagues = new ArrayList<>(); } public void register(Colleague colleague) { if (!colleagues.contains(colleague)) { colleague.setMediator(this); this.colleagues.add(colleague); } } public void relay(Colleague colleague) { colleagues.forEach(c -> { if (!c.equals(colleague)) { c.receive(); } }); } } /** * 具体的同事类1 */ public class ConcreteColleague1 extends Colleague { @Override public void receive() { System.out.println("colleague1 receive message."); } @Override public void send() { System.out.println("colleague1 send message."); //请中介者转发 this.mediator.relay(this); } } /** * 具体的同事类2 */ public class ConcreteColleague2 extends Colleague { @Override public void receive() { System.out.println("colleague2 receive message."); } @Override public void send() { System.out.println("colleague2 send message."); //请中介者转发 this.mediator.relay(this); } }
/** * 测试与应用 */ public class Test { public static void main(String[] args) { //构建中介者 Mediator mediator = new ConcreteMediator(); //构建具体的同事类 Colleague colleague1 = new ConcreteColleague1(); Colleague colleague2 = new ConcreteColleague2(); //注册同事 mediator.register(colleague1); mediator.register(colleague2); //发送消息 colleague1.send(); colleague2.send(); } }
colleague1 send message. colleague2 receive message. colleague2 send message. colleague1 receive message.
中介者模式角色介绍html
/** * 中介者类 */ public class StudyGroup { //发送消息 public static void showMessage (User user, String message) { System.out.println(new Date().toString() + " [" + user.getName() + "] :" + message); } } /** * 一块儿学习的同窗 */ public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public User (String name) { this.name = name; } public void sendMessage (String message) { StudyGroup.showMessage(this, message); } }
/** * 测试与应用 */ public class Test { public static void main(String[] args) { User ko = new User("K.O"); User tom = new User("Tom"); ko.sendMessage("learn design pattern."); tom.sendMessage("ok!"); } }
Sat Nov 16 17:49:06 CST 2019 [K.O] :learn design pattern. Sat Nov 16 17:49:06 CST 2019 [Tom] :ok!
中介者模式和观察者模式java
慕课网设计模式精讲
:https://coding.imooc.com/class/270.html 中介者模式(详解版)
:http://c.biancheng.net/view/1393.html