设计模式之中介者模式讲解

概念:也称为调停者模式。用一个中介者对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

  • 抽象中介者:定义中介者的操作。
  • 具体中介者:实现抽象中介者定义的操作,并持有被调停者对象。
  • 抽象被调停者:定义被调停者的操作。
  • 具体被调停者:实现具体操作,通过中介者进行交互。

以下用一个同事之间沟通的例子来帮助大家理解。

public interface Mediator {
    void changed(Colleague colleague);
    void register(Colleague colleague);
}

public interface Colleague {
    void send(String message);
    void receive(String message);
}

public class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues = new ArrayList<>();
    public void register(Colleague colleague) {
        colleagues.add(colleague);
    }
    @Override
    public void changed(Colleague colleague) {
        // 假设每个同事收到消息后都向所有其他同事发送消息
        for (Colleague c : colleagues) {
            if (!c.equals(colleague)) {
                c.receive("Message from " + colleague.getClass().getSimpleName());
            }
        }
    }
}

public class ConcreteColleagueA implements Colleague {
    private Mediator mediator;
    public ConcreteColleagueA(Mediator mediator) {
        this.mediator = mediator;
        mediator.register(this);
    }
    @Override
    public void send(String message) {
        System.out.println("Colleague A sends: " + message);
        mediator.changed(this);
    }
    @Override
    public void receive(String message) {
        System.out.println("Colleague A receives: " + message);
    }
}

public class ConcreteColleagueB implements Colleague {
    private Mediator mediator;
    public ConcreteColleagueB(Mediator mediator) {
        this.mediator = mediator;
        mediator.register(this);
    }
    @Override
    public void send(String message) {
        System.out.println("Colleague B sends: " + message);
        mediator.changed(this);
    }
    @Override
    public void receive(String message) {
        System.out.println("Colleague B receives: " + message);
    }
}

public class Demo {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        Colleague colleagueA = new ConcreteColleagueA(mediator);
        Colleague colleagueB = new ConcreteColleagueB(mediator);
        colleagueA.send("Hello from A");
        colleagueB.send("Hello from B");
    }
}

如果大家需要视频版本的讲解,欢迎关注我的B站:

【天哥不爱学习的个人空间-哔哩哔哩】 https://b23.tv/HxwqjXl

相关推荐

  1. 设计模式中介模式

    2024-04-09 15:46:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 15:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 15:46:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 15:46:03       82 阅读
  4. Python语言-面向对象

    2024-04-09 15:46:03       91 阅读

热门阅读

  1. 【系统架构师】-23种设计模式

    2024-04-09 15:46:03       31 阅读
  2. ubuntu 安装多版本 python 并使用

    2024-04-09 15:46:03       33 阅读
  3. Android Hal service compatibility matrix

    2024-04-09 15:46:03       38 阅读
  4. 在react项目中使用redux和reduxjs/toolkit

    2024-04-09 15:46:03       35 阅读
  5. 常见的行为识别算法及视频处理算法

    2024-04-09 15:46:03       33 阅读
  6. 搞懂了XML!

    2024-04-09 15:46:03       35 阅读
  7. 在Linux删除几天前的日志文件

    2024-04-09 15:46:03       34 阅读
  8. Spring与Spring Boot的区别和联系

    2024-04-09 15:46:03       35 阅读
  9. html自定义禁用状态下且已选中的checkbox

    2024-04-09 15:46:03       33 阅读
  10. 对称排序(蓝桥杯)

    2024-04-09 15:46:03       35 阅读
  11. 软件版权登记的条件

    2024-04-09 15:46:03       37 阅读