实现含有三个同事类的中介者模式的示例C++代码添加中文注释,其中每个同事可以向其他一个或两个同事发送消息。
时间: 2024-03-17 11:41:30 浏览: 15
以下是一个简单的中介者模式示例代码,实现了三个同事类:
```c++
#include <iostream>
#include <string>
using namespace std;
class Colleague;
// 中介者类
class Mediator {
public:
virtual void sendMessage(Colleague* colleague, string message) = 0;
};
// 同事类
class Colleague {
protected:
Mediator* mediator;
public:
Colleague(Mediator* m) {
mediator = m;
}
virtual void sendMessage(string message) = 0;
virtual void receiveMessage(string message) = 0;
};
// 具体同事类A
class ColleagueA : public Colleague {
public:
ColleagueA(Mediator* m) : Colleague(m) {}
void sendMessage(string message) override {
cout << "同事A发送了消息:" << message << endl;
mediator->sendMessage(this, message);
}
void receiveMessage(string message) override {
cout << "同事A收到了消息:" << message << endl;
}
};
// 具体同事类B
class ColleagueB : public Colleague {
public:
ColleagueB(Mediator* m) : Colleague(m) {}
void sendMessage(string message) override {
cout << "同事B发送了消息:" << message << endl;
mediator->sendMessage(this, message);
}
void receiveMessage(string message) override {
cout << "同事B收到了消息:" << message << endl;
}
};
// 具体同事类C
class ColleagueC : public Colleague {
public:
ColleagueC(Mediator* m) : Colleague(m) {}
void sendMessage(string message) override {
cout << "同事C发送了消息:" << message << endl;
mediator->sendMessage(this, message);
}
void receiveMessage(string message) override {
cout << "同事C收到了消息:" << message << endl;
}
};
// 具体中介者类
class ConcreteMediator : public Mediator {
private:
ColleagueA* colleagueA;
ColleagueB* colleagueB;
ColleagueC* colleagueC;
public:
void setColleagueA(ColleagueA* a) {
colleagueA = a;
}
void setColleagueB(ColleagueB* b) {
colleagueB = b;
}
void setColleagueC(ColleagueC* c) {
colleagueC = c;
}
void sendMessage(Colleague* colleague, string message) override {
if (colleague == colleagueA) {
colleagueB->receiveMessage(message);
colleagueC->receiveMessage(message);
} else if (colleague == colleagueB) {
colleagueA->receiveMessage(message);
colleagueC->receiveMessage(message);
} else if (colleague == colleagueC) {
colleagueA->receiveMessage(message);
colleagueB->receiveMessage(message);
}
}
};
int main() {
ConcreteMediator* mediator = new ConcreteMediator();
ColleagueA* colleagueA = new ColleagueA(mediator);
ColleagueB* colleagueB = new ColleagueB(mediator);
ColleagueC* colleagueC = new ColleagueC(mediator);
mediator->setColleagueA(colleagueA);
mediator->setColleagueB(colleagueB);
mediator->setColleagueC(colleagueC);
colleagueA->sendMessage("大家好啊!");
colleagueB->sendMessage("你们好!");
colleagueC->sendMessage("hello world!");
delete mediator;
delete colleagueA;
delete colleagueB;
delete colleagueC;
return 0;
}
```
上述代码实现了含有三个同事类的中介者模式,其中每个同事可以向其他一个或两个同事发送消息。在具体中介者类中,根据接收到消息的同事对象不同,将消息转发给其他同事。在 main 函数中,创建了一个具体中介者对象和三个具体同事对象,将它们注册到中介者对象中,并且通过具体同事类的 sendMessage 函数向其他同事发送消息。