中介者模式与几个C++应用实例

中介者模式 (Mediator Pattern) 深度解析
一、模式定义与核心思想
1. 定义:
中介者模式是一种行为设计模式,它用一个中介对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

2. 核心思想:

解耦:将原本对象之间复杂的、网状的多对多关系,转变为相对简单的、星形的一对多关系。中介者充当了“交通指挥中心”或“聊天室服务器”的角色。

集中控制:将分散在各个对象中的交互逻辑(通信协议、协调规则)集中到中介者中。这使得这些交互规则更容易理解和修改。

职责分离:各个同事对象(Colleague)只需负责自己的内部状态和行为,它们如何影响其他对象的工作,完全交给了中介者。

二、模式结构(UML 与角色分析)
中介者模式主要包含四个角色:

Mediator (中介者接口):定义了与各同事对象进行通信的接口,通常是一个抽象类或接口,声明了诸如 Notify 的方法。

ConcreteMediator (具体中介者):实现了中介者接口。它知晓所有具体的同事对象,并负责协调各个同事对象之间的交互。它包含了复杂的控制逻辑。

Colleague (同事类接口/基类):定义了同事对象的接口。它通常持有一个指向中介者对象的引用,用于通过中介者与其他同事通信。这个引用通常在构造函数中注入。

ConcreteColleague (具体同事类):实现了同事类接口。每个具体同事对象只知道中介者,而不知道其他同事对象。当需要与其他同事通信时,它会通知中介者。

三、C++ 实现与经典实例

中介者模式的核心在于一个知晓所有同事对象的具体中介者类,它包含了整个系统的交互逻辑。

实例1:聊天室(最经典的例子)

这是一个完美体现中介者模式的场景。多个用户(同事)不需要知道彼此的存在,他们只和聊天室(中介者)打交道。

UML 角色分析:

  • MediatorChatRoomMediator 接口(或抽象类),声明 sendMessage 方法。

  • ConcreteMediatorChatRoom 类,实现 sendMessage,知道所有用户,负责消息的广播。

  • ColleagueUser 基类,持有中介者的引用。

  • ConcreteColleagueChatUser 类,实现发送和接收消息的方法。

C++ 代码实现:

#include <iostream>
#include <string>
#include <vector>
#include <memory>

// 1. 前向声明
class User;

// 2. Mediator (中介者接口)
class ChatRoomMediator {
public:
    virtual void sendMessage(const std::string& message, const User* user) = 0;
    virtual ~ChatRoomMediator() = default;
};

// 3. Colleague (同事基类)
clas
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值