设计模式--行为模式--中介者模式
一、基本概念
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
角色分析:
A、Mediator 抽象中介者:用于定义统一的接口, 用于各同事对象之间的交互
B、Concrete Mediator 具体中介者:具体中介者持有各同事对象的引用, 负责协调各同事对象的行为以完成协作
C、 Colleague 同事角色,每个同事角色都知道中介者对象, 而且与其他同事角色通信的时候,都通过中介者协作完成
二、简单例子
A、Mediator 抽象中介者:

1 package comm.patter.action.mediator; 2 3 /** 4 * 5 * @Title: Mediator.java 6 * @Package: comm.patter.action.mediator 7 * @Description: 中介接口类 8 * @author yangzhancheng 9 * @2020年3月5日:下午5:44:38 10 * 11 */ 12 public interface Mediator { 13 14 //注册 15 void register(Colleague colleague); 16 17 //转发 18 void dispatcher(Colleague colleague); 19 20 }
B、Concrete Mediator 具体中介者:

1 package comm.patter.action.mediator; 2 3 /** 4 * 5 * @Title: Colleague.java 6 * @Package: comm.patter.action.mediator 7 * @Description: 同事的接口类 8 * @author yangzhancheng 9 * @2020年3月5日:下午6:45:54 10 * 11 */ 12 public interface Colleague { 13 14 //设置谁是中介者 15 void setMedium(Mediator mediator); 16 17 //接收消息 18 void receive(); 19 20 //发送消息 21 void send(); 22 23 }
C、 Colleague 同事角色。
C-1:

1 package comm.patter.action.mediator; 2 3 /** 4 * 5 * @Title: ConcreteColleague1.java 6 * @Package: comm.patter.action.mediator 7 * @Description: 同事的具体执行者 8 * @author yangzhancheng 9 * @2020年3月5日:下午7:48:28 10 * 11 */ 12 public class ConcreteColleague1 implements Colleague { 13 14 private Mediator mediator; 15 16 private String name ; 17 18 public ConcreteColleague1(String name){ 19 this.name = name; 20 } 21 22 public void setMedium(Mediator mediator) { 23 this.mediator = mediator; 24 } 25 26 public void receive() { 27 System.out.println("同事:" + this.name + "接收到消息。"); 28 } 29 30 public void send() { 31 System.out.println("同事:" + this.name + "发送信息消息。"); 32 33 //通知中介转发 34 mediator.dispatcher(this); 35 } 36 37 }
C-2:

1 package comm.patter.action.mediator; 2 3 4 /** 5 * 6 * @Title: ConcreteColleague1.java 7 * @Package: comm.patter.action.mediator 8 * @Description: 同事的具体执行者 9 * @author yangzhancheng 10 * @2020年3月5日:下午7:48:28 11 * 12 */ 13 14 15 public class ConcreteColleague2 implements Colleague { 16 17 private Mediator mediator; 18 19 private String name ; 20 21 public ConcreteColleague2(String name){ 22 this.name = name; 23 } 24 25 public void setMedium(Mediator mediator) { 26 this.mediator = mediator; 27 } 28 29 public void receive() { 30 System.out.println("同事:" + this.name + "接收到消息。"); 31 } 32 33 public void send() { 34 System.out.println("同事:" + this.name + "发送信息消息。"); 35 36 //通知中介转发 37 mediator.dispatcher(this); 38 } 39 }
C-3:

1 package comm.patter.action.mediator; 2 3 /** 4 * 5 * @Title: ConcreteColleague1.java 6 * @Package: comm.patter.action.mediator 7 * @Description: 同事的具体执行者 8 * @author yangzhancheng 9 * @2020年3月5日:下午7:48:28 10 * 11 */ 12 13 public class ConcreteColleague3 implements Colleague { 14 15 private Mediator mediator; 16 17 private String name ; 18 19 public ConcreteColleague3(String name){ 20 this.name = name; 21 } 22 23 public void setMedium(Mediator mediator) { 24 this.mediator = mediator; 25 } 26 27 public void receive() { 28 System.out.println("同事:" + this.name + "接收到消息。"); 29 } 30 31 public void send() { 32 System.out.println("同事:" + this.name + "发送信息消息。"); 33 34 //通知中介转发 35 mediator.dispatcher(this); 36 } 37 }
D、Client

1 package comm.patter.action.mediator; 2 3 /** 4 * 5 * @Title: Client.java 6 * @Package: comm.patter.action.mediator 7 * @Description: 客户端实现类 8 * @author yangzhancheng 9 * @2020年3月5日:下午7:34:16 10 * 11 */ 12 13 public class Client { 14 15 public static void main(String[] args) { 16 17 Mediator md = new ConcreteMediator(); 18 19 Colleague c1, c2, c3; 20 c1 = new ConcreteColleague1("张三"); 21 c2 = new ConcreteColleague2("李四"); 22 c3 = new ConcreteColleague3("王五"); 23 24 md.register(c1); 25 md.register(c2); 26 md.register(c3); 27 28 c1.send(); 29 System.out.println("---------------"); 30 c2.send(); 31 System.out.println("---------------"); 32 c3.send(); 33 } 34 35 }
运行结果
同事:张三发送信息消息。 同事:李四接收到消息。 同事:王五接收到消息。 --------------- 同事:李四发送信息消息。 同事:张三接收到消息。 同事:王五接收到消息。 --------------- 同事:王五发送信息消息。 同事:张三接收到消息。 同事:李四接收到消息。
三、总结
补充:那些源代码用到