设计模式:中介者模式(C++实现)

在中介者模式中,中介者对象负责协调多个对象之间的交互,将对象之间的耦合度降低。

#include 
#include 
#include 

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是中介者接口,定义了发送消息的方法。Colleague是同事类,定义了接收消息和发送消息的方法。ConcreteColleagueA和ConcreteColleagueB是具体的同事类,实现了同事接口。ConcreteMediator是具体的中介者类,实现了中介者接口,并维护了同事对象的列表。在main函数中,我们创建了中介者对象和两个具体同事对象,并将同事对象添加到中介者中。然后,同事对象可以通过中介者来发送消息,并且中介者会将消息传递给其他同事对象。输出结果将显示同事对象之间的交互。

你可能感兴趣的:(设计模式,设计模式,中介者模式,c++)