当前位置:   article > 正文

中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)

定义

中介者模式(Mediator Pattern)是一种行为设计模式,它用于将一组对象的交互行为封装在一个中介者对象中,从而减少对象之间的直接耦合。这种模式提供了一种集中式的控制方式,通过中介者对象来协调不同对象之间的交互。

示例

以下是一个简单的 C++ 中介者模式的示例,我们以聊天室为例,其中用户(User)之间的消息传递通过中介者(ChatRoom)进行协调。

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. class User;
  5. // 中介者接口
  6. class ChatRoom {
  7. public:
  8. virtual void sendMessage(const std::string& message, User* user) = 0;
  9. };
  10. // 具体中介者类
  11. class ConcreteChatRoom : public ChatRoom {
  12. public:
  13. void sendMessage(const std::string& message, User* user) override {
  14. // 将消息广播给其他用户
  15. for (User* u : users) {
  16. if (u != user) {
  17. u->receiveMessage(message);
  18. }
  19. }
  20. }
  21. void addUser(User* user) {
  22. users.push_back(user);
  23. }
  24. private:
  25. std::vector<User*> users;
  26. };
  27. // 抽象同事类
  28. class User {
  29. public:
  30. User(const std::string& name, ChatRoom* chatRoom) : name(name), chatRoom(chatRoom) {
  31. chatRoom->addUser(this);
  32. }
  33. virtual void sendMessage(const std::string& message) {
  34. chatRoom->sendMessage(name + ": " + message, this);
  35. }
  36. virtual void receiveMessage(const std::string& message) {
  37. std::cout << name << " received: " << message << std::endl;
  38. }
  39. private:
  40. std::string name;
  41. ChatRoom* chatRoom;
  42. };
  43. // 具体同事类
  44. class ConcreteUser : public User {
  45. public:
  46. ConcreteUser(const std::string& name, ChatRoom* chatRoom) : User(name, chatRoom) {}
  47. // 具体用户的其他操作...
  48. };
  49. int main() {
  50. ConcreteChatRoom chatRoom;
  51. ConcreteUser user1("Alice", &chatRoom);
  52. ConcreteUser user2("Bob", &chatRoom);
  53. ConcreteUser user3("Charlie", &chatRoom);
  54. user1.sendMessage("Hello, everyone!");
  55. return 0;
  56. }

解释:

  1. 中介者接口和具体中介者类: ChatRoom 是中介者的接口,ConcreteChatRoom 是实现该接口的具体中介者类。中介者负责协调用户之间的通信。

  2. 抽象同事类和具体同事类: User 是抽象同事类,ConcreteUser 是实现该抽象类的具体同事类。每个用户通过中介者发送消息,并接收其他用户的消息。

  3. 用户和中介者的交互: 用户通过中介者发送消息,中介者负责将消息传递给其他用户。这样,用户之间不直接通信,而是通过中介者进行协调,降低了对象之间的耦合性。

  4. 示例运行: 在示例中,Alice 发送消息后,Bob 和 Charlie 都能收到消息,而不需要直接知道消息的发送者是谁。这就是中介者模式的作用。

中介者模式可以在需要解耦多个对象之间的交互关系时发挥作用,使得系统更加灵活可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/181108
推荐阅读
相关标签
  

闽ICP备14008679号