著者: Zhai Tianbao Steven
著作権表示: 著作権は著者に帰属します. 商用転載の場合は、著者に連絡して許可を得てください. 非商用転載の場合は、出典を示してください.
1. 中間モデルとは?
メディエーター モードは、アービター モードとも呼ばれる動作ソフトウェア設計モードです. 名前が示すように、このモードの役割は、他のクラスが適切に通信できるようにする仲介者になることです。
クラス間の関係が混沌としていると、強い結合が生じます。賃貸住宅を例にとると、10 人の入居者と 5 人の家主がいて、1 本の回線で相互に通信する場合、それらの間の通信は比較的混乱し、メンテナンスははるかに複雑になります。このとき、テナントと家主の情報を統合する不動産業者が登場し、仲介業者がテナントと家主の間の適切なコミュニケーションを手配することで、コミュニケーションが効率的かつ明確になり、もちろん手数料がかかります(中間クラス コードのメンテナンス オーバーヘッドを追加するようなものです)。
メディエーター モデルの利点:
- デカップリング。仲介者の存在により、同僚間の強い結合関係が取り除かれ、全体に影響を与えることなく独立して変更できるため、再利用が容易になります。
- 優れたスケーラビリティ。メディエーターを拡張するだけで、相互作用の動作が変わります。
- 簡単な管理のための一元化された対話。
メディエーター モデルの短所:
- メディエーターの役割は重要で複雑です。
2.中間モデル
2.1 構造図
クライアントが主な機能であり、人間と仲介者は相互に関連しています。
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;
}
プログラム結果は以下の通りです。
テナントはエージェントにメッセージを送信し、エージェントはそのメッセージを家主に中継します。
3. まとめ
中間モデルの理解を、より一般的な言葉と直感的なコード ルーチンで表現するように最善を尽くします. 思慮に欠ける場所があるかもしれません. 異なる意見がある場合は、コメント欄でお知らせください! 私の例が、メディエーター パターンをよりよく理解するのに役立つことを願っています。
記事がお役に立てば、いいねでお知らせください。とても嬉しいです〜さあ!