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

相关推荐
wellc27 分钟前
SpringBoot集成Flowable
java·spring boot·后端
Hui Baby1 小时前
springAi+MCP三种
java
hsjcjh1 小时前
【MySQL】C# 连接MySQL
java
敖正炀1 小时前
LinkedBlockingDeque详解
java
wangyadong3171 小时前
datagrip 链接mysql 报错
java
untE EADO1 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL1 小时前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀2 小时前
DelayQueue 详解
java
敖正炀2 小时前
PriorityBlockingQueue 详解
java
shark22222222 小时前
Spring 的三种注入方式?
java·数据库·spring