中介者模式(Mediator Pattern)

简介: 中介者模式(Mediator Pattern)是一种行为型设计模式,它用于降低多个对象之间的耦合度,通过引入一个中介者对象,将对象之间的交互转化为中介者和对象之间的交互,从而避免了对象之间的直接耦合。

中介者模式(Mediator Pattern)是一种行为型设计模式,它用于降低多个对象之间的耦合度,通过引入一个中介者对象,将对象之间的交互转化为中介者和对象之间的交互,从而避免了对象之间的直接耦合。

在中介者模式中,有三个核心角色:Mediator(中介者)、Colleague(同事类)和ConcreteMediator(具体中介者)。Mediator(中介者)是抽象中介者,Colleague(同事类)是抽象同事类,ConcreteMediator(具体中介者)是具体中介者。

下面是一个简单的中介者模式Demo,假设有一个聊天室系统,它包含了多个用户,每个用户可以发送和接收消息:

# 中介者类
class ChatRoom:
    def __init__(self):
        self._users = []

    def add_user(self, user):
        self._users.append(user)

    def send_message(self, message, sender):
        for user in self._users:
            if user != sender:
                user.receive(message)

# 同事类
class User:
    def __init__(self, name):
        self._name = name

    def send(self, message):
        chat_room.send_message(message, self)

    def receive(self, message):
        print(f"{self._name} received message: {message}")

# 客户端代码
chat_room = ChatRoom()

alice = User("Alice")
bob = User("Bob")
charlie = User("Charlie")

chat_room.add_user(alice)
chat_room.add_user(bob)
chat_room.add_user(charlie)

alice.send("Hello, Bob and Charlie!")
bob.send("Hi, Alice!")
charlie.send("Nice to meet you, Alice and Bob!")
AI 代码解读

在这个Demo中,ChatRoom是中介者类,它维护了一个用户列表,并实现了发送消息的方法。User是同事类,它包含了发送和接收消息的方法。

当客户端使用中介者模式时,需要先定义一个中介者类和多个同事类。同事类可以向中介者发送消息,中介者收到消息后,可以将消息转发给其他同事类。

中介者模式的应用场景比较广泛,例如:

  1. GUI应用程序:GUI应用程序中,多个组件之间经常需要交互,可以使用中介者模式来降低组件之间的耦合度。
  2. 聊天室系统:聊天室系统中,多个用户之间需要发送和接收消息,可以使用中介者模式来协调用户之间的交互。
  3. 航空管制系统:航空管制系统中,多个飞机之间需要协调交通,可以使用中介者模式来降低飞机之间的耦合度。

补充一下,这个示例是Python代码,下面是一个相似的Java代码示例:

import java.util.*;

// 中介者类
class ChatRoom {
   
    private final List<User> users = new ArrayList<>();

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

    public void sendMessage(String message, User sender) {
   
        for (User user : users) {
   
            if (user != sender) {
   
                user.receive(message);
            }
        }
    }
}

// 同事类
class User {
   
    private final String name;

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

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

    public void receive(String message) {
   
        System.out.println(name + " received message: " + message);
    }
}

// 客户端代码
ChatRoom chatRoom = new ChatRoom();

User alice = new User("Alice");
User bob = new User("Bob");
User charlie = new User("Charlie");

chatRoom.addUser(alice);
chatRoom.addUser(bob);
chatRoom.addUser(charlie);

alice.send("Hello, Bob and Charlie!");
bob.send("Hi, Alice!");
charlie.send("Nice to meet you, Alice and Bob!");
AI 代码解读

以下是一些学习中介者模式的推荐资源:

《Head First 设计模式》:这是一本通俗易懂的设计模式入门书籍,其中包含了对中介者模式的讲解和示例代码。
《设计模式:可复用面向对象软件的基础》:这是设计模式的经典著作之一,其中包含了对中介者模式的详细讲解和示例代码。
《图解设计模式:以UML为基础,学习23种设计模式》:这是一本以图解为主的设计模式入门书籍,其中包含了对中介者模式的详细讲解和示例代码。
中介者模式的Java实现:这是一个包含了中介者模式示例代码的Java项目,可以帮助读者更好地理解和应用中介者模式。
GitHub链接:https://github.com/iluwatar/java-design-patterns/tree/master/mediator
总之,学习中介者模式需要结合书籍和实践,建议读者选择一些适合自己的入门书籍,同时结合实际项目中的设计问题进行实践,加深对中介者模式的理解和应用。

目录
打赏
0
1
1
1
1187
分享
相关文章
设计模式21 - 中介者模式【【Mediator Pattern】
设计模式21 - 中介者模式【【Mediator Pattern】
63 0
|
2月前
|
中介者模式(Mediator Pattern)
中介者模式是一种行为型设计模式,通过引入中介者对象来简化对象间的通信,减少多对象间的直接交互,降低系统耦合度。核心概念包括中介者、具体中介者和同事类。常见使用场景有聊天室、航空交通控制系统和GUI组件交互。优点是降低系统复杂度和提高灵活性,但中介者可能变得复杂,成为性能瓶颈。
38 3
享元模式(Flyweight Pattern)
享元模式是一种结构型设计模式,通过共享对象来减少内存使用。它将对象分为共享和非共享部分,通过享元工厂管理和复用共享对象,适用于大量相似对象的场景,能显著节省内存并提高性能。典型应用包括文本编辑器中的字符样式和图形系统中的图形属性。
49 2
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
107 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
认真学习设计模式之中介者模式(Mediator Pattern)
认真学习设计模式之中介者模式(Mediator Pattern)
85 0
设计模式18 - 访问者模式【Visitor Pattern】
设计模式18 - 访问者模式【Visitor Pattern】
49 0
结构型模式 - 装饰器模式(Decorator Pattern)
结构型模式 - 装饰器模式(Decorator Pattern)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等