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 互相发送和接收消息,而不需要直接交互。

相关推荐
一头生产的驴5 分钟前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao12 分钟前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc78716 分钟前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
灵性花火35 分钟前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt
DES 仿真实践家1 小时前
【Day 11-N22】Python类(3)——Python的继承性、多继承、方法重写
开发语言·笔记·python
YuTaoShao2 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
Code Warrior2 小时前
【每日算法】专题五_位运算
开发语言·c++
程序员张33 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
沐知全栈开发5 小时前
HTML DOM 访问
开发语言
llwszx5 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁