中介者模式(Mediator Pattern)

2024/4/1 Java进阶

中介集中对象的复杂操作,对象调用则通过中介来调用,也就是说中介来封装一系列的对象交互。

# 1、中介者模式案例

  • 华为手机:操作华为打电话、操作小米发信息
  • 小米手机:操作小米发信息、操作华为打电话
  • 两者执行的操作顺序不同,对象不同,按普通模式肯定要相互注入,我们按中介者模式进行解耦,并通过中介者对象封装操作。
public interface Phone {
    void startUsePhone(Mediator mediator);
}
1
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

加入中介者来操作华为手机和小米手机,这样华为手机和小米手机就没什么大关联了,就实现了解耦。

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
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