当前位置: 首页 > article >正文

中介者模式详解

中介者模式

简介通过引入一个中介者对象来封装和协调多个对象之间的交互,从而降低对象间的耦合度。
人话:就是两个类或者系统之间, 不要直接互相调用, 而是要中间的类来专门进行交互。
举个例子
比如两个国家之间(关系差, 没有大使馆), 需要联合国作为中介进行对话.

class Country;


class UnitedNations
{
public:
	vector<Country*> _countries;
	void add_contry(Country* c);
	void send(string s);
};


class Country
{
private:
	UnitedNations* un;
public:
	Country(UnitedNations* u) : un(u) {};
	UnitedNations* get_un() { return un; };
	virtual void speek(string s) = 0;
	virtual void listen(string s) = 0;
};


void UnitedNations::add_contry(Country* c)
{
	_countries.push_back(c);
}


void UnitedNations::send(string s)
{
	for (Country* c : _countries)
		c->listen(s);
}


class China : public Country
{
public:
	China(UnitedNations* un) : Country(un) {};
	void speek(string s) override
	{
		cout << "China said : " << s << endl;
		get_un()->send(s);
	}
	void listen(string s)override
	{
		cout << "----China get : " << s << endl;
	}
};


class America : public Country
{
public:
	America(UnitedNations* un) : Country(un) {};
	void speek(string s) override
	{
		cout << "America said : " << s << endl;
		get_un()->send(s);
	}
	void listen(string s)override
	{
		cout << "----America get : " << s << endl;
	}
};


class Russia : public Country
{
public:
	Russia(UnitedNations* un) : Country(un) {};
	void speek(string s) override
	{
		cout << "Russia said : " << s << endl;
		get_un()->send(s);
	}
	void listen(string s)override
	{
		cout << "----Russia get : " << s << endl;
	}
};



int main()
{
	UnitedNations* un = new UnitedNations();
	China* c = new China(un);
	America* a = new America(un);
	Russia* r = new Russia(un);

	un->add_contry(c);
	un->add_contry(a);
	un->add_contry(r);

	r->speek("美国, 你爹来了");
	a->speek("呵呵, 笑死");
	c->speek("大家文明讲话");

	return 0;
}

执行结果
在这里插入图片描述


http://www.kler.cn/a/287596.html

相关文章:

  • MYSQL_深入理解自连接_图书借阅情况(2/2)
  • nfs服务器--RHCE
  • linux虚拟机无法使用yum在线拉取
  • vue3 如何调用第三方npm包内部的 pinia 状态管理库方法
  • 风电电力系统低碳调度论文阅读第一期
  • 人工智能训练师 综合测试题库一
  • Pytorch实现多层LSTM模型,并增加emdedding、Dropout、权重共享等优化
  • Python 爬虫爬取京东商品信息
  • 会赢的!(牛客)
  • 买电脑如何选择显卡?
  • 10、Flink 动态表之更新和追加查询详解
  • 【React】Redux-toolkit 处理异步操作
  • 网络是怎样连接的
  • 数美Android SDK
  • JavaWeb笔记整理11——Nginx反向代理Tomcat
  • K8S ReplicaSet
  • 安装office过程中遇到的一系列问题及解放方案(Windows)
  • 深度学习100问37:什么是Gated RNN 框架
  • 一份高质量的测试用例如何养成?
  • 国内外大模型汇总(包括科大星火、文心一言、通义千问、智普清言、华为大模型)
  • 【算法】LRU置换算法
  • 【Tools】什么是MapReduce
  • 【软考】多媒体知识
  • 异步并发处理利器:在 Jupyter Notebook 中玩转 asyncio
  • Html 添加音效音乐音频播放和震动效果
  • Python测试开发基础(三)---random模块