【设计模式】中介模式

一、定义

  中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

二、结构

中介者模式的结构

中介者模式包含以下主要角色。

  1)抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

  2)具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。 

  3)抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。 

  4)具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

结构图

  

三、代码实现

 1 public class Client {
 2     public static void main(String[] args) {
 3         ConcreteMediator mediator = new ConcreteMediator();
 4         Colleague colleague1 = new ConcreteColleague1();
 5         Colleague colleague2 = new ConcreteColleague2();
 6         mediator.register(colleague1);
 7         mediator.register(colleague2);
 8         colleague1.send();
 9         System.out.println("-------------");
10         colleague2.send();
11     }
12 }
13 // 抽象中介者
14 abstract class Mediator {
15     public abstract void register(Colleague colleague);
16     // 转发
17     public abstract void relay(Colleague cl);
18 }
19 // 具体中介者
20 class ConcreteMediator extends Mediator {
21     private List<Colleague> colleagues = new ArrayList<>();
22     @Override
23     public void register(Colleague colleague) {
24         if(!colleagues.contains(colleague)) {
25             colleagues.add(colleague);
26             colleague.setMediator(this);
27         }
28     }
29     @Override
30     public void relay(Colleague cl) {
31         for (Colleague c : colleagues) {
32             if (!c.equals(cl)) {
33                 c.receive();
34             }
35         }
36     }
37 }
38 // 抽象同事类
39 abstract class Colleague {
40     protected Mediator mediator;
41     public void setMediator(Mediator mediator){
42         this.mediator = mediator;
43     }
44     public abstract void receive();
45     public abstract void send();
46 }
47 // 具体同事类1
48 class ConcreteColleague1 extends Colleague {
49     @Override
50     public void receive() {
51         System.out.println("具体同事类1收到请求。");
52     }
53     @Override
54     public void send() {
55         System.out.println("具体同事类1发出请求。");
56         mediator.relay(this); //请中介者转发
57     }
58 }
59 // 具体同事类2
60 class ConcreteColleague2 extends Colleague {
61     @Override
62     public void receive() {
63         System.out.println("具体同事类2收到请求。");
64     }
65     @Override
66     public void send() {
67         System.out.println("具体同事类2发出请求。");
68         mediator.relay(this); //请中介者转发
69     }
70 }
原文地址:https://www.cnblogs.com/h--d/p/14702475.html