行为型模式-中介者模式

中介者模式(Mediator Pattern)是行为型设计模式之一,主要用于减少对象之间的直接依赖,提升系统的可扩展性和可维护性。在中介者模式中,一个中介者对象负责封装一组对象之间的交互,从而使它们不需要直接引用彼此。通过将复杂的网状依赖转换为星型依赖,系统结构变得更加清晰。

核心思想

将对象之间的交互逻辑集中到一个中介者对象中,避免对象之间直接调用。

各对象只需要与中介者交互,而不需要了解其他对象的实现细节。

适用场景

系统中存在复杂的对象交互,且依赖关系呈现网状结构。

希望通过引入中介者减少对象间的耦合,提高系统的可维护性。

优缺点

  • 优点
    降低对象间的耦合度,促使代码模块化。
    集中控制交互逻辑,便于维护和扩展。
    提高代码的可读性和可复用性。
  • 缺点
    中介者对象可能会变得复杂,成为"上帝类"。
    需要额外的开发成本来实现中介者。

结构

中介者模式的结构主要包括以下角色:

  • Mediator(抽象中介者): 定义对象交互的接口。
  • ConcreteMediator(具体中介者): 实现抽象中介者接口,协调各同事对象之间的交互。
  • Colleague(同事类): 每个同事类与中介者交互,完全依赖中介者进行通信。

实现代码示例

以一个聊天室为例,展示中介者模式的实现:

java 复制代码
// 抽象中介者
interface ChatMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}

// 具体中介者
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.receive(message);
            }
        }
    }

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

// 抽象同事类
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 ChatUser extends User {

    public ChatUser(ChatMediator mediator, String name) {
        super(mediator, name);
    }

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

    @Override
    public void receive(String message) {
        System.out.println(name + " 接收到消息: " + message);
    }
}

// 测试代码
public class MediatorPatternExample {
    public static void main(String[] args) {
        ChatMediator chatRoom = new ChatRoom();

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

        chatRoom.addUser(user1);
        chatRoom.addUser(user2);
        chatRoom.addUser(user3);

        user1.send("Hello, everyone!");
        user2.send("Hi Alice!");
    }
}

总结

中介者模式通过引入一个中介者,将复杂的对象交互逻辑集中管理。它适合用在模块间关系复杂但又需要解耦的场景,如聊天系统、GUI组件交互等。

相关推荐
Meteors.2 天前
23种设计模式——中介者模式 (Mediator Pattern)详解
java·设计模式·中介者模式
bkspiderx9 天前
C++设计模式之行为型模式:中介者模式(Mediator)
c++·设计模式·中介者模式
charlie11451419112 天前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
青草地溪水旁21 天前
设计模式(C++)详解——中介者模式(2)
c++·设计模式·中介者模式
大飞pkz21 天前
【设计模式】中介者模式
开发语言·设计模式·c#·中介者模式
努力也学不会java25 天前
【设计模式】中介者模式
java·设计模式·中介者模式
phdsky1 个月前
【设计模式】中介者模式
c++·设计模式·中介者模式
new_daimond1 个月前
设计模式-中介者模式详解
设计模式·中介者模式
yujkss1 个月前
23种设计模式之【中介者模式】-核心原理与 Java 实践
java·设计模式·中介者模式
TechNomad2 个月前
设计模式:中介者模式(Mediator Pattern)
设计模式·中介者模式