廊坊web大連seo按天付費
在中介者模式中,中介者對象負責協(xié)調多個對象之間的交互,將對象之間的耦合度降低。
#include <iostream>
#include <string>
#include <vector>class Colleague;// 中介者接口
class Mediator
{
public:virtual void sendMessage(Colleague *sender, const std::string &message) = 0;
};// 同事類
class Colleague
{
protected:Mediator *mediator;std::string name;public:Colleague(Mediator *mediator, const std::string &name) : mediator(mediator), name(name) {}virtual void receiveMessage(const std::string &message) = 0;virtual void sendMessage(const std::string &message) = 0;
};// 具體同事類A
class ConcreteColleagueA : public Colleague
{
public:ConcreteColleagueA(Mediator *mediator, const std::string &name) : Colleague(mediator, name) {}void receiveMessage(const std::string &message) override{std::cout << "ConcreteColleagueA " << name << " received message: " << message << std::endl;}void sendMessage(const std::string &message) override{mediator->sendMessage(this, message);}
};// 具體同事類B
class ConcreteColleagueB : public Colleague
{
public:ConcreteColleagueB(Mediator *mediator, const std::string &name) : Colleague(mediator, name) {}void receiveMessage(const std::string &message) override{std::cout << "ConcreteColleagueB " << name << " received message: " << message << std::endl;}void sendMessage(const std::string &message) override{mediator->sendMessage(this, message);}
};// 具體中介者類
class ConcreteMediator : public Mediator
{
private:std::vector<Colleague *> colleagues;public:void addColleague(Colleague *colleague){colleagues.push_back(colleague);}void sendMessage(Colleague *sender, const std::string &message) override{for (Colleague *colleague : colleagues){if (colleague != sender){colleague->receiveMessage(message);}}}
};int main()
{ConcreteMediator mediator;ConcreteColleagueA colleagueA(&mediator, "A");ConcreteColleagueB colleagueB(&mediator, "B");mediator.addColleague(&colleagueA);mediator.addColleague(&colleagueB);colleagueA.sendMessage("Hello from A");colleagueB.sendMessage("Hi from B");return 0;
}
運行結果:
ConcreteColleagueB B received message: Hello from A
ConcreteColleagueA A received message: Hi from B
在上述代碼中,Mediator是中介者接口,定義了發(fā)送消息的方法。Colleague是同事類,定義了接收消息和發(fā)送消息的方法。ConcreteColleagueA和ConcreteColleagueB是具體的同事類,實現(xiàn)了同事接口。ConcreteMediator是具體的中介者類,實現(xiàn)了中介者接口,并維護了同事對象的列表。在main函數(shù)中,我們創(chuàng)建了中介者對象和兩個具體同事對象,并將同事對象添加到中介者中。然后,同事對象可以通過中介者來發(fā)送消息,并且中介者會將消息傳遞給其他同事對象。輸出結果將顯示同事對象之間的交互。