1. 基本概念

中介者模式(Mediator Pattern)也被称为调停者模式,是一种行为型设计模式,它通过一个中介对象来封装一组对象之间的交互,从而使这些对象不需要直接相互引用。这样可以降低对象之间的耦合度,使系统更容易维护和扩展。

2. 基本结构

中介者模式包括以下几个重要角色:

image-20240517212443634

  • 抽象中介者(Mediator): 定义中介者的接口,用于各个具体同事对象之间的通信。
  • 具体中介者(Concrete Mediator): 实现抽象中介者接口,负责协调各个具体同事对象的交互关系,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
  • 抽象同事类(Colleague): 定义同事类的接口,维护一个对中介者对象的引用,用于通信。
  • 具体同事类(Concrete Colleague): 实现抽象同事类接口,每个具体同事类只知道自己的行为,而不了解其他同事类的情况,因为它们都需要与中介者通信,通过中介者协调与其他同事对象的交互。

3. 简易实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// 抽象中介者
public abstract class Mediator {
void register(Colleague colleague);
// 定义一个抽象的发送消息方法
public abstract void send(String message, Player player);

}

// 具体中介者
public class ConcreteMediator extends Mediator {
private List<Colleague> colleagues = new ArrayList<>();

public void register((Colleague colleague) {
colleagues.add(colleague);
}

@Override
public void send(String message, Colleague colleague) {
for (Colleague c : colleagues) {
// 排除发送消息的同事对象
if (c != colleague) {
c.receive(message);
}
}
}
}

// 同事对象
abstract class Colleague {
protected Mediator mediator;

public Colleague(Mediator mediator) {
this.mediator = mediator;
}

// 发送消息
public abstract void send(String message);

// 接收消息
public abstract void receive(String message);
}

// 具体同事对象1
class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}

@Override
public void send(String message) {
mediator.send(message, this);
}

@Override
public void receive(String message) {
System.out.println("ConcreteColleague1 received: " + message);
}
}

// 具体同事对象2
class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}

@Override
public void send(String message) {
mediator.send(message, this);
}

@Override
public void receive(String message) {
System.out.println("ConcreteColleague2 received: " + message);
}
}

// 客户端
public class Main{
public static void main(String[] args) {
// 创建中介者
Mediator mediator = new ConcreteMediator();

// 创建同事对象
Colleague colleague1 = new ConcreteColleague1(mediator);
Colleague colleague2 = new ConcreteColleague2(mediator);

// 注册同事对象到中介者
mediator.register(colleague1);
mediator.register(colleague2);

// 同事对象之间发送消息
colleague1.send("Hello from Colleague1!");
colleague2.send("Hi from Colleague2!");
}
}

4. 使用场景

中介者模式使得同事对象不需要知道彼此的细节,只需要与中介者进行通信,简化了系统的复杂度,也降低了各对象之间的耦合度,但是这也会使得中介者对象变得过于庞大和复杂,如果中介者对象出现问题,整个系统可能会受到影响。

中介者模式适用于当系统对象之间存在复杂的交互关系或者系统需要在不同对象之间进行灵活的通信时使用,可以使得问题简化,


本站由 卡卡龙 使用 Stellar 1.29.1主题创建

本站访问量 次. 本文阅读量 次.