1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:領導者介面 6 * 時間:2016年3月5日下午10:41:35 7 * 作者:cutter_point 8 */ 9 public interface Leader 10
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:領導者介面 6 * 時間:2016年3月5日下午10:41:35 7 * 作者:cutter_point 8 */ 9 public interface Leader 10 { 11 //寢室長負責調解 12 public void adjust(Colleague c1, Colleague c2, String message); 13 }
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:寢室長 6 * 時間:2016年3月5日下午10:48:20 7 * 作者:cutter_point 8 */ 9 public class DormitoryLeader implements Leader 10 { 11 private Colleague1 colleague1; 12 private Colleague2 colleague2; 13 14 @Override 15 public void adjust(Colleague c1, Colleague c2, String message) 16 { 17 if(c1 == colleague1) 18 { 19 colleague1.getMessage(message); 20 } 21 else 22 { 23 colleague2.getMessage(message); 24 } 25 26 System.out.print("\t同意和解與\t"); 27 28 if(c2 == colleague2) 29 { 30 colleague2.getMessage(message); 31 } 32 else 33 { 34 colleague1.getMessage(message); 35 } 36 } 37 38 public Colleague1 getColleague1() 39 { 40 return colleague1; 41 } 42 43 public void setColleague1(Colleague1 colleague1) 44 { 45 this.colleague1 = colleague1; 46 } 47 48 public Colleague2 getColleague2() 49 { 50 return colleague2; 51 } 52 53 public void setColleague2(Colleague2 colleague2) 54 { 55 this.colleague2 = colleague2; 56 } 57 58 }
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:同事介面 6 * 時間:2016年3月5日下午10:49:16 7 * 作者:cutter_point 8 */ 9 public abstract class Colleague 10 { 11 protected Leader mediator; //中介者 12 13 public Colleague(Leader l) 14 { 15 this.mediator = l; 16 } 17 }
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 5 /** 6 * 功能:同事類 7 * 時間:2016年3月5日下午10:51:31 8 * 作者:cutter_point 9 */ 10 public class Colleague1 extends Colleague 11 { 12 public Colleague1(Leader l) 13 { 14 super(l); 15 } 16 17 //爭吵 18 public void quarrel(String message, Colleague c1) 19 { 20 //和c1進行爭吵 21 this.mediator.adjust(this, c1, message); 22 } 23 24 //得到勸解 25 public void getMessage(String message) 26 { 27 System.out.println("colleague1" + message); 28 } 29 }
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:同事2 6 * 時間:2016年3月5日下午11:07:50 7 * 作者:cutter_point 8 */ 9 public class Colleague2 extends Colleague 10 { 11 12 public Colleague2(Leader l) 13 { 14 super(l); 15 } 16 17 //爭吵 18 public void quarrel(String message, Colleague c2) 19 { 20 //和c1進行爭吵 21 this.mediator.adjust(this, c2, message); 22 } 23 24 //得到勸解 25 public void getMessage(String message) 26 { 27 System.out.println("colleague2" + message); 28 } 29 30 }
1 package com.shejimoshi.behavioral.Mediator; 2 3 4 /** 5 * 功能:用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變他們之間的交互 6 * 適用:一組對象以定義良好但是複雜的方式進行通信。產生的相互的依賴關係結構混亂且難以理解 7 * 一個對象引用其他很多對象並且直接與這些對象通信,導致難以復用該對象 8 * 想定製一個分佈在多個類中的行為,而又不想生成太多子類。 9 * 時間:2016年3月5日下午8:24:26 10 * 作者:cutter_point 11 */ 12 public class Test 13 { 14 public static void main(String[] args) 15 { 16 //創建寢室長 17 DormitoryLeader dl = new DormitoryLeader(); 18 //創建兩個在寢室中的同事 19 Colleague1 c1 = new Colleague1(dl); 20 Colleague2 c2 = new Colleague2(dl); 21 22 dl.setColleague1(c1); 23 dl.setColleague2(c2); 24 25 c1.quarrel("亂扔垃圾", c2); 26 c2.quarrel("沒有扔垃圾", c1); 27 28 } 29 }
colleague1亂扔垃圾 同意和解與 colleague2亂扔垃圾 colleague2沒有扔垃圾 同意和解與 colleague1沒有扔垃圾