赞
踩
中介者模式(Mediator Pattern)是一种行为设计模式,它用于将一组对象的交互行为封装在一个中介者对象中,从而减少对象之间的直接耦合。这种模式提供了一种集中式的控制方式,通过中介者对象来协调不同对象之间的交互。
以下是一个简单的 C++ 中介者模式的示例,我们以聊天室为例,其中用户(User)之间的消息传递通过中介者(ChatRoom)进行协调。
- #include <iostream>
- #include <string>
- #include <vector>
-
- class User;
-
- // 中介者接口
- class ChatRoom {
- public:
- virtual void sendMessage(const std::string& message, User* user) = 0;
- };
-
- // 具体中介者类
- class ConcreteChatRoom : public ChatRoom {
- public:
- void sendMessage(const std::string& message, User* user) override {
- // 将消息广播给其他用户
- for (User* u : users) {
- if (u != user) {
- u->receiveMessage(message);
- }
- }
- }
-
- void addUser(User* user) {
- users.push_back(user);
- }
-
- private:
- std::vector<User*> users;
- };
-
- // 抽象同事类
- class User {
- public:
- User(const std::string& name, ChatRoom* chatRoom) : name(name), chatRoom(chatRoom) {
- chatRoom->addUser(this);
- }
-
- virtual void sendMessage(const std::string& message) {
- chatRoom->sendMessage(name + ": " + message, this);
- }
-
- virtual void receiveMessage(const std::string& message) {
- std::cout << name << " received: " << message << std::endl;
- }
-
- private:
- std::string name;
- ChatRoom* chatRoom;
- };
-
- // 具体同事类
- class ConcreteUser : public User {
- public:
- ConcreteUser(const std::string& name, ChatRoom* chatRoom) : User(name, chatRoom) {}
-
- // 具体用户的其他操作...
- };
-
- int main() {
- ConcreteChatRoom chatRoom;
-
- ConcreteUser user1("Alice", &chatRoom);
- ConcreteUser user2("Bob", &chatRoom);
- ConcreteUser user3("Charlie", &chatRoom);
-
- user1.sendMessage("Hello, everyone!");
-
- return 0;
- }
中介者接口和具体中介者类: ChatRoom
是中介者的接口,ConcreteChatRoom
是实现该接口的具体中介者类。中介者负责协调用户之间的通信。
抽象同事类和具体同事类: User
是抽象同事类,ConcreteUser
是实现该抽象类的具体同事类。每个用户通过中介者发送消息,并接收其他用户的消息。
用户和中介者的交互: 用户通过中介者发送消息,中介者负责将消息传递给其他用户。这样,用户之间不直接通信,而是通过中介者进行协调,降低了对象之间的耦合性。
示例运行: 在示例中,Alice 发送消息后,Bob 和 Charlie 都能收到消息,而不需要直接知道消息的发送者是谁。这就是中介者模式的作用。
中介者模式可以在需要解耦多个对象之间的交互关系时发挥作用,使得系统更加灵活可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。