一、中介者模式是什么?
中介者模式是一种行为型的软件设计模式,也称为仲裁者模式,顾名思义,该模式的作用就是中介,帮助其他类进行良好的交流。
类之间关系混乱的时候,会有很强的耦合性。就拿租房为例,如果有10个租客,5个房东,他们各自单线联系,那么他们之间的交流会相对混乱,维护起来也复杂的多。此时出现了一个房产中介,它将租客和房东的信息整合起来,由中介安排合适的租客和房东交流,那么交流就变得高效且清晰,当然也要付费的(就像增加中介类的代码维护开销一样)。
中介者模式的优点:
- 解耦。中介的存在使得同事对象间的强耦合关系解除,它们可以独立地变化而不会影响到整体,便于被复用。
- 良好扩展性。交互行为发生改变,只需要扩展中介即可。
- 集中交互,便于管理。
中介者模式的缺点:
- 中介者的职责很重要,且复杂。
二、中介者模式
2.1 结构图
客户端即Main主函数,人和中介互相关联。
2.2 代码示例
场景描述:房东和租客通过房产中介交流。
//Mediator.h /****************************************************/ #pragma once #include <iostream> #include <unordered_map> #include <vector> #include <list> #include <string> using namespace std; class Person; // 抽象中介者 class Mediator { public: // 发出信息 virtual void sendMessage(std::string message, Person* colleague) = 0; }; // 抽象类-人 class Person { public: // 构造函数 Person(Mediator* mediator) : m_mediator(mediator) {} // 发出消息 virtual void sendMessage(std::string message) = 0; // 获取消息 virtual void getMessage(std::string message) = 0; protected: Mediator* m_mediator; }; // 具体类-租客 class Tenant : public Person { public: // 构造函数 Tenant(Mediator* mediator) : Person(mediator) {} // 发出消息 virtual void sendMessage(std::string message) { m_mediator->sendMessage(message, this); } // 获取消息 virtual void getMessage(std::string message) { std::cout << "租客得到消息:" << message << std::endl; } }; // 具体类-房东 class Landlord : public Person { public: // 构造函数 Landlord(Mediator* mediator) : Person(mediator) {} // 发出消息 virtual void sendMessage(std::string message) { m_mediator->sendMessage(message, this); } // 获取消息 virtual void getMessage(std::string message) { std::cout << "房东得到消息:" << message << std::endl; } }; // 具体中介者-房产中介 class RealEstateMediator : public Mediator { public: // 设置租客 void setTenant(Person* tenant) { m_tenant = tenant; } // 设置房东 void setLandlord(Person* landlord) { m_landlord = landlord; } // 发出信息 virtual void sendMessage(std::string message, Person* colleague) { if (colleague == m_tenant) { m_landlord->getMessage(message); } else { m_tenant->getMessage(message); } } private: Person* m_tenant; Person* m_landlord; };
//main.cpp /****************************************************/ #include <iostream> #include <string> #include "Iterator.h" using namespace std; int main() { // 创建对象 RealEstateMediator *mediator = new RealEstateMediator(); Person *tenant = new Tenant(mediator); Person *landlord = new Landlord(mediator); // 中介设置房东和租客 mediator->setTenant(tenant); mediator->setLandlord(landlord); // 进行租房询问 tenant->sendMessage("房租多少钱?"); landlord->sendMessage("房租3000元。"); // 删除 delete mediator; delete tenant; delete landlord; mediator = nullptr; tenant = nullptr; landlord = nullptr; return 0; }
程序结果如下。
租客向中介发出消息,中介将消息转给了房东,反之亦然。
三、总结
我尽可能用较通俗的话语和直观的代码例程,来表述我对中介者模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解中介者模式。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!