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

中介者模式详解

中介者模式

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

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.mrgr.cn/news/14855.html

相关文章:

  • Windows上MSYS2的安装和使用
  • Android12 添加设置控制导航栏显示和状态栏下拉
  • 【如何用本机的Navicat远程连接到ubuntu服务器上的mysql】
  • Ubuntu 24.04 Intel install netcdf parallel
  • 智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(KNN分类器)
  • 本地部署一个WordPress博客结合内网穿透实现异地远程访问本地站点
  • Java巅峰之路---进阶篇---面向对象(三)
  • django(二):第一个项目
  • 无人机科普,民用用途!!!
  • 【递归深搜之记忆化搜索算法】
  • 【Git】使用 Git Stash 临时保存和恢复修改
  • 记录|SPC公式小结
  • [mysql]Navicat_SQLyog_dbeaver等mysql图形工具的安装和使用
  • gitignore does not work
  • 关于VUE3开发频繁引入ref,reactive,computed等基础函数。
  • 【记录】基于Windows系统安装rust环境的过程
  • 深度解析高防产品---游戏盾
  • Golang小项目(2)
  • React 入门第八天:性能优化与开发者工具的使用
  • AcWing 2. 01背包问题