滨城区建设局网站,vi设计的目的和意义,wordpress 增加背景图片,河北省建设机械会网站中介者模式属于行为型设计模式#xff0c;旨在减少对象之间的耦合关系#xff0c;通过引入一个中介者对象#xff0c;将对象间复杂的交互转化为中介者与对象之间的简单交互#xff0c;中介者模式实现了集中式控制#xff0c;有助于系统的维护和扩展。
以下是一个使用中介…中介者模式属于行为型设计模式旨在减少对象之间的耦合关系通过引入一个中介者对象将对象间复杂的交互转化为中介者与对象之间的简单交互中介者模式实现了集中式控制有助于系统的维护和扩展。
以下是一个使用中介者模式的示例假设有多个同事对象Colleague这些同事对象以不同方式交互为了解耦合引入一个中介者对象Mediator该中介者对象负责协调所有同事对象之间的交互如下所示
在上图中Colleague类是抽象同事类具体同事类ConcreteColleague1和ConcreteColleague2继承自该类。Mediator是抽象中介者类具体中介者类ConcreteMediator继承自该类并实现中介者的具体逻辑。
具体代码实现如下
//抽象同事类
class Colleague
{
public:Colleague(Mediator* mediator) : m_mediator(mediator) {}virtual void sendMsg(std::string msg) 0;virtual void receiveMsg(std::string msg) 0;
protected:Mediator* m_mediator;
};//具体同事类1
class ConcreteColleague1 : public Colleague
{
public:ConcreteColleague1(Mediator* mediator) : Colleague(mediator) {}void sendMsg(std::string msg) override{m_mediator-sendMsg(msg, this);}void receiveMsg(std::string msg) override{std::cout ConcreteColleague1 received msg: msg std::endl;}
};//具体同事类2
class ConcreteColleague2 : public Colleague
{
public:ConcreteColleague2(Mediator* mediator) : Colleague(mediator) {}void sendMsg(std::string msg) override{m_mediator-sendMsg(msg, this);}void receiveMsg(std::string msg) override{std::cout ConcreteColleague2 received msg: msg std::endl;}
};//抽象中介者类
class Mediator
{
public:virtual void sendMsg(std::string msg, Colleague* sender) 0;
};//具体中介者类
class ConcreteMediator : public Mediator
{
public:ConcreteMediator() {}void sendMsg(std::string msg, Colleague* sender) override{auto iter m_colleagues.find(sender);if (iter ! m_colleagues.end()){for (auto it m_colleagues.begin(); it ! m_colleagues.end(); it){if (it-first ! iter-first){it-second-receiveMsg(msg);}}}}void addColleague(Colleague* colleague){m_colleagues[colleague] colleague;}
private:std::mapColleague*, Colleague* m_colleagues;
};int main()
{ConcreteMediator mediator;ConcreteColleague1 colleague1(mediator);ConcreteColleague2 colleague2(mediator);mediator.addColleague(colleague1);mediator.addColleague(colleague2);colleague1.sendMsg(Hello, this is ConcreteColleague1.);colleague2.sendMsg(Hi, this is ConcreteColleague2.);return 0;
}在上述代码中Colleague类是抽象同事类ConcreteColleague1和ConcreteColleague2是具体同事类它们都继承自Colleague类并实现了虚函数sendMsg和receiveMsg。Mediator是抽象中介者类ConcreteMediator是具体中介者类它们都继承自Mediator类并实现了虚函数sendMsg。
在main函数中创建了具体中介者ConcreteMediator对象以及两个具体同事ConcreteColleague1和ConcreteColleague2对象并将它们加入ConcreteMediator对象的同事列表中。接着分别调用ConcreteColleague1对象和ConcreteColleague2对象的sendMsg函数向ConcreteMediator对象发送消息最终得到正确的输出结果。
总之中介者模式通过引入中介者对象将对象间复杂的交互转化为中介者与对象之间的简单交互从而减少了对象之间的耦合关系。在实际应用中开发人员可以根据实际需要灵活使用中介者模式以获得更好的系统拓展性和可维护性。