java中介模式

中介者(Mediator)模式是一种行为设计模式,它定义了一个对象来封装一组对象之间的交互。中介者对象负责控制和协调这些对象之间的交互,使得这些对象不需要显式地相互引用,从而降低它们之间的耦合。

以下是一个简单的中介者模式实现示例,以一个简化版的聊天室应用为例:

  1. 定义中介者接口:
java 复制代码
public interface ChatMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}
  1. 实现中介者:
java 复制代码
public class ChatRoom implements ChatMediator {
    private List<User> users = new ArrayList<>();

    @Override
    public void sendMessage(String message, User user) {
        for (User u : users) {
            if (u != user) { // 不向发送者回送消息
                u.receiveMessage(message);
            }
        }
    }

    @Override
    public void addUser(User user) {
        users.add(user);
    }
}
  1. 定义用户类:
java 复制代码
public class User {
    private String name;
    private ChatMediator mediator;

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

    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }

    public void receiveMessage(String message) {
        System.out.println(name + " received: " + message);
    }
}
  1. 使用示例:
java 复制代码
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatRoom();

        User user1 = new User("Alice", mediator);
        User user2 = new User("Bob", mediator);
        User user3 = new User("Charlie", mediator);

        user1.sendMessage("Hello, Bob!");
        user2.sendMessage("Hi, Alice! How are you?");
        user3.sendMessage("Hello, everyone!");
    }
}

在这个示例中,ChatRoom 是中介者,负责转发消息给所有用户,而 User 对象只需要知道如何发送和接收消息,不需要知道其他用户的存在,这样实现了用户之间的解耦。

当你运行 MediatorPatternDemomain 方法时,你会发现三个用户通过 ChatRoom 互相发送和接收消息,而不需要直接交互。

相关推荐
caimouse11 分钟前
reactos编码规范
c语言·开发语言
xieliyu.4 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约4 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee4 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Jinkxs4 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
CryptoPP5 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫5 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1235 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
云烟成雨TD6 小时前
Spring AI 1.x 系列【51】可观测性技术选型
java·人工智能·spring