作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
一、中介者模式是什么?
中介者模式是一种行为型的软件设计模式,也称为仲裁者模式,顾名思义,该模式的作用就是中介,帮助其他类进行良好的交流。
类之间关系混乱的时候,会有很强的耦合性。就拿租房为例,如果有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;
}
程序结果如下。
租客向中介发出消息,中介将消息转给了房东,反之亦然。
三、总结
我尽可能用较通俗的话语和直观的代码例程,来表述我对中介者模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解中介者模式。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!