/** * 同事抽象類 */ 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