23种设计模式-16中介者模式

中介者模式

适合阅读本专栏的人群包括:

  • 想提升代码质量和架构思维的 Java 开发者
  • 在工作中面对复杂业务、代码难以维护的工程师
  • 想准备面试、系统复习设计模式知识的同学

阅读完本专栏,你将掌握:

  • 23 种设计模式的结构、适用场景和最佳实践
  • 面向对象六大设计原则的使用方式
  • 如何用设计模式解决常见业务场景问题
  • 如何重构低质量代码,提升扩展性与可维护性

任何问题都可以在留言区指出,作者看到后会第一时间回复。

概念总是生僻的,可以结合代码多体会多练习。

如果本文章给你带来一点点收获请点点赞支持一下,谢谢各位架构师,技术专家,专业大拿。

其他模式详解:设计模式入门

中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个中介对象来封装一组对象的交互。中介者模式通过使对象之间的交互仅通过中介者进行,从而减少对象之间的直接依赖,使对象之间的耦合松散,增加代码的可扩展性和可维护性。

适用场景

  1. 对象之间交互复杂,关系多对多 → 用中介者集中管理

  2. 交互逻辑分散且复杂, 中介者统一控制流程

  3. 需要提高组件复用性,对象只关注自身,依赖中介者通信

中介者模式的结构

  1. 中介者接口(Mediator):定义了各个同事对象之间通信的方法。
  2. 具体中介者(ConcreteMediator):实现中介者接口,协调各个同事对象之间的交互。
  3. 同事类(Colleague):各个同事类知道中介者,并通过中介者与其他同事类交互。

代码示例

以下是一个 Java 实现的中介者模式示例。我们将创建一个简单的聊天应用,其中用户通过聊天中介者发送消息。

中介者接口(ChatMediator):定义了发送消息和添加用户的方法。

具体中介者类(ChatMediatorImpl):实现了中介者接口,管理用户列表并负责消息的转发。

同事类(User):抽象类,定义了发送消息和接收消息的抽象方法。

具体同事类(UserImpl) :实现了 User 类,并通过中介者发送和接收消息。

客户端(MediatorPatternDemo):创建了中介者和多个用户,并通过用户发送消息。

java 复制代码
// 中介者接口
interface ChatMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}
// 具体中介者类
class ChatMediatorImpl implements ChatMediator {
    private List<User> users;

    public ChatMediatorImpl() {
        this.users = new ArrayList<>();
    }

    @Override
    public void addUser(User user) {
        this.users.add(user);
    }

    @Override
    public void sendMessage(String message, User user) {
        for (User u : this.users) {
            // 消息不应该发送给发送消息的用户
            if (u != user) {
                u.receive(message);
            }
        }
    }
}
// 同事类
abstract class User {
    protected ChatMediator mediator;
    protected String name;

    public User(ChatMediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
    }

    public abstract void send(String message);
    public abstract void receive(String message);
}

// 具体同事类
class UserImpl extends User {
    public UserImpl(ChatMediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void send(String message) {
        System.out.println(this.name + " Sending Message: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name + " Received Message: " + message);
    }
}

// 客户端
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatMediatorImpl();
        
        User user1 = new UserImpl(mediator, "Alice");
        User user2 = new UserImpl(mediator, "Bob");
        User user3 = new UserImpl(mediator, "Charlie");
        User user4 = new UserImpl(mediator, "David");

        mediator.addUser(user1);
        mediator.addUser(user2);
        mediator.addUser(user3);
        mediator.addUser(user4);

        user1.send("Hi All");
    }
}

总结

中介者模式与我们日常生活中理解的中介其实是一样的,买卖双方通过中介打交道,不需要直接交互。在这个过程中,中介者就可以对交易做一些处理了,现实中,中介赚取中介费用。在我们的代码中,可以利用中介者做数据处理,或者像上面提到的案例,中介者具备将消息广播出去的能力。

相关推荐
开心香辣派小星1 小时前
23种设计模式-13命令模式
设计模式·命令模式
繁华似锦respect15 小时前
C++ unordered_map 底层实现与详细使用指南
linux·开发语言·c++·网络协议·设计模式·哈希算法·散列表
繁华似锦respect1 天前
HTTPS 中 TLS 协议详细过程 + 数字证书/签名深度解析
开发语言·c++·网络协议·http·单例模式·设计模式·https
数智研发说1 天前
智汇电器携手鼎捷PLM:从“制造”迈向“智造”,构建高效协同研发新范式
大数据·人工智能·设计模式·重构·制造·设计规范
繁华似锦respect1 天前
Linux - KCP 协议深度解析:原理、与 TCP/UDP 的对比及应用场景
linux·tcp/ip·观察者模式·设计模式·udp
太阳以西阿1 天前
【设计模式03】命令设计模式(行为型设计模式)
设计模式
太阳以西阿1 天前
【设计模式02】策略设计模式(行为型设计模式)
设计模式
雨中飘荡的记忆1 天前
设计模式之享元模式详解
java·设计模式·享元模式
Blossom.1181 天前
基于多智能体协作的AIGC内容风控系统:从单点检测到可解释裁决链
人工智能·python·深度学习·机器学习·设计模式·aigc·transformer