デザイン モードの中間モード (C++)

著者: Zhai Tianbao Steven
著作権表示: 著作権は著者に帰属します. 商用転載の場合は、著者に連絡して許可を得てください. 非商用転載の場合は、出典を示してください.

1. 中間モデルとは?

       メディエーター モードは、アービター モードとも呼ばれる動作ソフトウェア設計モードです. 名前が示すように、このモードの役割は、他のクラスが適切に通信できるようにする仲介者になることです。

       クラス間の関係が混沌としていると、強い結合が生じます。賃貸住宅を例にとると、10 人の入居者と 5 人の家主がいて、1 本の回線で相互に通信する場合、それらの間の通信は比較的混乱し、メンテナンスははるかに複雑になります。このとき、テナントと家主の情報を統合する不動産業者が登場し、仲介業者がテナントと家主の間の適切なコミュニケーションを手配することで、コミュニケーションが効率的かつ明確になり、もちろん手数料がかかります(中間クラス コードのメンテナンス オーバーヘッドを追加するようなものです)。

       メディエーター モデルの利点:

  1. デカップリング。仲介者の存在により、同僚間の強い結合関係が取り除かれ、全体に影響を与えることなく独立して変更できるため、再利用が容易になります。
  2. 優れたスケーラビリティ。メディエーターを拡張するだけで、相互作用の動作が変わります。
  3. 簡単な管理のための一元化された対話。

      メディエーター モデルの短所:

  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. まとめ

       中間モデルの理解を、より一般的な言葉と直感的なコード ルーチンで表現するように最善を尽くします. 思慮に欠ける場所があるかもしれません. 異なる意見がある場合は、コメント欄でお知らせください! 私の例が、メディエーター パターンをよりよく理解するのに役立つことを願っています。

       記事がお役に立てば、いいねでお知らせください。とても嬉しいです〜さあ!

おすすめ

転載: blog.csdn.net/zhaitianbao/article/details/130111084