中介者模式(Mediator Pattern)
半塘 2024/4/1 Java进阶
中介集中对象的复杂操作,对象调用则通过中介来调用,也就是说中介来封装一系列的对象交互。
# 1、中介者模式案例
- 华为手机:操作华为打电话、操作小米发信息
- 小米手机:操作小米发信息、操作华为打电话
- 两者执行的操作顺序不同,对象不同,按普通模式肯定要相互注入,我们按中介者模式进行解耦,并通过中介者对象封装操作。
public interface Phone {
void startUsePhone(Mediator mediator);
}
1
2
3
2
3
// 华为手机
public class HuaweiPhone implements Phone{
@Override
public void startUsePhone(Mediator mediator) {
mediator.huaweiOperation();
}
public void call(){
System.out.println("华为打电话");
}
}
// 小米手机
public class XiaomiPhone implements Phone{
@Override
public void startUsePhone(Mediator mediator) {
mediator.xiaomiOperation();
}
public void sendMessage(){
System.out.println("小米发信息");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
加入中介者来操作华为手机和小米手机,这样华为手机和小米手机就没什么大关联了,就实现了解耦。
public class Mediator {
private HuaweiPhone huaweiPhone;
private XiaomiPhone xiaomiPhone;
public Mediator(HuaweiPhone huaweiPhone,XiaomiPhone xiaomiPhone) {
this.huaweiPhone = huaweiPhone;
this.xiaomiPhone = xiaomiPhone;
}
// 中介封装华为操作
public void huaweiOperation(){
huaweiPhone.call();
xiaomiPhone.sendMessage();
}
// 中介封装小米操作
public void xiaomiOperation(){
xiaomiPhone.sendMessage();
huaweiPhone.call();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ClientTest {
public static void main(String[] args) {
HuaweiPhone huaweiPhone = new HuaweiPhone();
XiaomiPhone xiaomiPhone = new XiaomiPhone();
// 将对象给中介
Mediator mediator = new Mediator(huaweiPhone,xiaomiPhone);
// 华为告诉中介我要用手机了
huaweiPhone.startUsePhone(mediator);
System.out.println("==================");
// 小米告诉中介我要用手机了
xiaomiPhone.startUsePhone(mediator);
}
}
/**
* 输出结果:
* 华为打电话
* 小米发信息
* ==================
* 小米发信息
* 华为打电话
* /
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23