定义
中介者模式(Mediator Pattern)是一种行为型设计模式,用于定义一个中介对象来封装一组对象之间的交互。通过中介者模式,对象之间的交互不再直接发生,而是通过中介者来协调和管理。这减少了对象之间的耦合,使得对象之间的关系更加松散。
结构
-
Mediator(中介者) : 定义中介者的接口,通常包含一个方法来通知中介者各个对象的变化。
-
ConcreteMediator(具体中介者) : 实现Mediator接口,负责协调和管理各个同事对象之间的交互。
-
Colleague(同事类) : 各个参与交互的对象,每个同事对象都持有一个中介者的引用,通过中介者来进行交互。
-
ConcreteColleague(具体同事类) : 实现Colleague接口,利用中介者与其他同事对象进行交互。
代码示例
#include <iostream>
#include <string>
#include <vector>
// 中介者接口
class Mediator
{
public:
virtual void send(const std::string& message, class Colleague* sender) = 0;
};
// 同事类
class Colleague
{
protected:
Mediator* mediator;
public:
Colleague(Mediator* mediator) : mediator(mediator) {}
virtual void receive(const std::string& message) = 0;
void send(const std::string& message)
{
mediator->send(message, this);
}
};
// 具体同事类 - 用户
class User : public Colleague
{
std::string name;
public:
User(const std::string& name, Mediator* mediator) : Colleague(mediator), name(name) {}
void receive(const std::string& message) override
{
std::cout << name << " received: " << message << std::endl;
}
};
// 具体中介者 - 聊天室
class ChatRoom : public Mediator
{
std::vector<Colleague*> users;
public:
void addUser(Colleague* user)
{
users.push_back(user);
}
void send(const std::string& message, Colleague* sender) override
{
for (auto user : users)
{
if (user != sender)
{
user->receive(message);
}
}
}
};
int main() {
// 创建中介者
ChatRoom chatRoom;
// 创建用户
User user1("Alice", &chatRoom);
User user2("Bob", &chatRoom);
User user3("Charlie", &chatRoom);
// 添加用户到聊天室
chatRoom.addUser(&user1);
chatRoom.addUser(&user2);
chatRoom.addUser(&user3);
// 用户发送消息
user1.send("Hello everyone!");
user2.send("Hi Alice!");
system("pause");
return 0;
}
-
Mediator 是中介者接口,定义了
send方法来转发消息。 -
Colleague 是同事类基类,定义了与中介者交互的接口,包括
receive和send方法。 -
User 是具体的同事类,代表聊天室中的用户,能够发送和接收消息。
-
ChatRoom 是具体的中介者,实现了消息转发的逻辑。它维护了用户列表,并将消息从发送者转发给其他用户。
-
在
main函数中,创建了一个聊天室和几个用户,并模拟用户发送消息。