中介者模式(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!")

在这个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!");

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

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

目录
相关文章
|
设计模式 前端开发
设计模式21 - 中介者模式【【Mediator Pattern】
设计模式21 - 中介者模式【【Mediator Pattern】
52 0
|
设计模式 Java uml
备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将对象恢复到原先保存的状态。
99 3
|
6月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
64 0
|
存储 Java 程序员
行为型模式 - 备忘录模式(Memento Pattern)
行为型模式 - 备忘录模式(Memento Pattern)
|
存储 设计模式 前端开发
详解Java设计模式之观察者模式(Observer Pattern)
详解Java设计模式之观察者模式(Observer Pattern)
169 0
详解Java设计模式之观察者模式(Observer Pattern)
|
算法 Java 编译器
行为型模式 - 访问者模式(Visitor Pattern)
行为型模式 - 访问者模式(Visitor Pattern)
|
Java 程序员
行为型模式 - 观察者模式(Observer Pattern)
行为型模式 - 观察者模式(Observer Pattern)
|
算法 Java
行为型模式 - 策略模式(Strategy Pattern)
行为型模式 - 策略模式(Strategy Pattern)
|
设计模式 Java 数据库连接
门面模式 Facade Pattern
主要内容有: 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的代码示例:熟悉该模式的代码长什么样子 该模式的优缺点:模式不是万金油,不可以滥用模式 该模式的应用案例:了解它在哪些重要的源码中被使用
166 0