设计模式--行为模式--中介者模式

一、基本概念

中介者模式(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 }
View Code

 

 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 }
View Code

 

 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 }
View Code

 

 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 }
View Code

 

 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 }
View Code

 

 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 }
View Code

 

运行结果

同事:张三发送信息消息。
同事:李四接收到消息。
同事:王五接收到消息。
---------------
同事:李四发送信息消息。
同事:张三接收到消息。
同事:王五接收到消息。
---------------
同事:王五发送信息消息。
同事:张三接收到消息。
同事:李四接收到消息。

 

三、总结

    补充:那些源代码用到

 

posted on 2020-03-12 22:28  茫然的法庭  阅读(112)  评论(0)    收藏  举报

导航