当前位置: 首页> 房产> 市场 > 苏州seo网站管理_商场设计平面布置图_seo发帖软件_站长平台网站

苏州seo网站管理_商场设计平面布置图_seo发帖软件_站长平台网站

时间:2025/7/14 0:53:26来源:https://blog.csdn.net/ox0080/article/details/145772982 浏览次数:0次
苏州seo网站管理_商场设计平面布置图_seo发帖软件_站长平台网站

聊天室

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>// 前向声明
class User;// 抽象中介者
class ChatMediator {
public:virtual ~ChatMediator() = default;virtual void broadcast(const std::string& msg, User* sender) = 0;virtual void privateMessage(const std::string& msg, User* sender, const std::string& receiver) = 0;
};// 抽象用户类
class User {
protected:ChatMediator* mediator_;std::string name_;public:User(ChatMediator* mediator, std::string name): mediator_(mediator), name_(std::move(name)) {}virtual ~User() = default;// 发送广播void sendToAll(const std::string& msg) {mediator_->broadcast(msg, this);}// 发送私信void sendPrivate(const std::string& msg, const std::string& receiver) {mediator_->privateMessage(msg, this, receiver);}virtual void receive(const std::string& msg, const User* sender = nullptr) const {std::cout << "[" << name_ << "] 收到";if(sender) std::cout << "来自[" << sender->name_ << "]的";std::cout << "消息: " << msg << std::endl;}std::string getName() const { return name_; }
};// 具体中介者
class ChatRoom : public ChatMediator {
private:std::unordered_map<std::string, User*> users_;public:void addUser(User* user) {users_.emplace(user->getName(), user);}void broadcast(const std::string& msg, User* sender) override {for (auto& [name, user] : users_) {if (user != sender) user->receive(msg, sender);}}void privateMessage(const std::string& msg, User* sender,const std::string& receiver) override {if (auto it = users_.find(receiver); it != users_.end()) {it->second->receive(msg, sender);} else {sender->receive("用户不存在: " + receiver);}}
};// 客户端使用
int main() {ChatRoom chatRoom;User alice(&chatRoom, "Alice");User bob(&chatRoom, "Bob");User charlie(&chatRoom, "Charlie");chatRoom.addUser(&alice);chatRoom.addUser(&bob);chatRoom.addUser(&charlie);// 广播消息alice.sendToAll("大家好!");// 私信消息bob.sendPrivate("今晚一起吃饭吗?", "Alice");charlie.sendPrivate("测试消息", "UnknownUser");return 0;
}

关键说明:

  1. 明确消息类型

    • broadcast():广播给所有用户(排除发送者)
    • privateMessage():精确发送给指定用户
  2. 输出结果

[Bob] 收到来自[Alice]的消息: 大家好!
[Charlie] 收到来自[Alice]的消息: 大家好!
[Alice] 收到来自[Bob]的消息: 今晚一起吃饭吗?
[Charlie] 收到消息: 用户不存在: UnknownUser
  1. 模式优势体现

    • 完全解耦:用户之间无需知道彼此存在
    • 集中路由:所有消息逻辑在中介者中处理
    • 灵活扩展:可轻松添加群组消息、消息过滤等新功能
  2. 设计亮点

    • 使用哈希表快速查找用户(O(1)时间复杂度)
    • 接收消息时显示发送者信息
    • 处理用户不存在等异常情况

模式结构示意图:

           +----------------+|  ChatMediator  |+----------------+| broadcast()    || privateMessage()|+--------+-------+ʌ| 中介
+-------------+     |     +-------------+
|    User     +-----+-----+  ChatRoom   |
+-------------+           +-------------+
| sendToAll() |           | 用户管理    |
| sendPrivate()           | 消息路由    |
+-------------+           +-------------+

何时使用中介者模式:

  1. 当对象间存在 复杂网状通信关系
  2. 需要 集中控制 多个对象间的交互时
  3. 系统需要 动态调整通信规则

待扩展

  • 添加消息历史记录功能
  • 实现消息撤回机制
  • 增加用户权限验证
  • 支持@指定用户的群组消息
关键字:苏州seo网站管理_商场设计平面布置图_seo发帖软件_站长平台网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: