首页 > 其他分享 >【设计模式25】中介者模式

【设计模式25】中介者模式

时间:2023-04-10 15:32:33浏览次数:42  
标签:25 USA mediator Country 中介 UniteNations message 设计模式 Declare


基本概念

【设计模式25】中介者模式_ios

具体案例

【设计模式25】中介者模式_ios_02

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <crtdbg.h>   
#include<unordered_map>

using namespace std;

class Country;

//联合国机构
class UniteNations
{
public:
	UniteNations();
	~UniteNations();
	virtual void Declare(string message, Country* colleague)=0;
private:

};

//国家
class Country
{
public:
	Country();
	~Country();
	Country(UniteNations* mediator) {
		this->mediator = mediator;
	}

protected:
	UniteNations* mediator;
private:

};

//米国
class USA:public Country
{
public:
	USA();
	~USA();
	USA(UniteNations* mediator) {
		this->mediator = mediator;
	}
	void Declare(string message) {
		mediator->Declare(message, this);
	}
	void GetMessage(string message) {
		cout << "米国获得消息,即将攻打日本:" << message << endl;
	}
private:
};

class Iraq:public Country
{
public:
	Iraq();
	~Iraq();
	Iraq(UniteNations* mediator) {
		this->mediator = mediator;
	}
	void Declare(string message) {
		mediator->Declare(message, this);
	}

	void GetMessage(string message) {
		cout << "伊拉克获得对方消息,米国要打他:" << message << endl;
	}
private:
};

// 联合国安全理事会
class UnitedNationSecurityCouncil:public UniteNations
{
public:
	UnitedNationSecurityCouncil();
	~UnitedNationSecurityCouncil();

	//米国
	void setColleague1(USA* coll) {
		colleague1 = coll;
	}
	void setColleague2(Iraq* coll) {
		colleague2 = coll;
	}
	USA* getColleague1(){
		return colleague1;
	}
	Iraq* getColleague2(){
			return colleague2;
	}

	void Declare(string message, Country* colleague) {
		if (colleague == colleague1) {
			colleague2->GetMessage(message);
		}
		else {
			colleague1->GetMessage(message);
		}
	}

private:
	USA* colleague1;
	Iraq* colleague2;
};

UnitedNationSecurityCouncil::UnitedNationSecurityCouncil()
{
}

UnitedNationSecurityCouncil::~UnitedNationSecurityCouncil()
{
}

Iraq::Iraq()
{
}

Iraq::~Iraq()
{
}


USA::USA()
{
}

USA::~USA()
{
}

Country::Country()
{
}

Country::~Country()
{
}



UniteNations::UniteNations()
{
}

UniteNations::~UniteNations()
{
}

int main(int argc, char** argv)
{
	UnitedNationSecurityCouncil* UNSC = new UnitedNationSecurityCouncil();
	USA* c1 = new USA(UNSC);
	Iraq* c2 = new Iraq(UNSC);
	UNSC->setColleague1(c1);
	UNSC->setColleague2(c2);

	c1->Declare("打的好,打的棒棒哦!");
	c2->Declare("弄两颗原子弹过来岛国");

	return 0;
}


标签:25,USA,mediator,Country,中介,UniteNations,message,设计模式,Declare
From: https://blog.51cto.com/u_16063698/6181010

相关文章

  • 【设计模式9】原型模式
    脑图展开一般模型具体案例(Qt,C++)定义相关类,实现个人简历的初始化和拷贝工作,其中简历的数据成员包括:姓名、性别、年龄、任职时段、任职公司,以及用于观察浅拷贝的引用(指针)成员;classICloneable{public:ICloneable();virtualICloneable*Clone()=0;//抽象的Clone方......
  • 【设计模式7】代理模式
    基本概念(1)代理模型:为其他对象提供一种代理以控制这个对象的访问。(2)代理模式的适用场景:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实;虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,从而......
  • Python 小型项目大全 21~25
    二十一、DNA可视化原文:http://inventwithpython.com/bigbookpython/project21.html脱氧核糖核酸是一种微小的分子,存在于我们身体的每个细胞中,包含着我们身体如何生长的蓝图。它看起来像一对核苷酸分子的双螺旋结构:鸟嘌呤、胞嘧啶、腺嘌呤和胸腺嘧啶。这些用字母G、C、A和......
  • 设计模式-代理模式
    定义为其他对象提供一种代理以控制对这个对象的访问类图时序图角色定义抽象主体角色:抽象类或者接口,普通业务的定义具体主体角色:被代理角色,业务逻辑的具体执行者代理主体角色:委托类,代理类优缺点优点职责清晰,实现好内部结构即可,具体客户要求由代理进行分化高扩展性......
  • java设计模式之责任链模式
    责任链模式定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际上是一个递归调用。特点: 1、有多个对象共同对一个任务进行处理。  2、这些对象使用链式存储结构,形成一......
  • OKHttp库都用到了哪些设计模式
    Builder模式:用于构建OkHttpClient、Request和Response等类的对象,以实现链式调用和可配置性。Singleton模式:用于创建OkHttpClient和Dispatcher等类的单例对象,以确保全局只有一个实例。Factory模式:用于创建Call和WebSocket等类的对象,以隐藏对象的创建细节并提供灵活性。C......
  • 20230225模拟赛(jnxxhzz)
    A.bubble冒泡排序考虑k次冒泡中的每一次,会把最大的数移到最右边而只有最大数在变吗?以14352为例5的右边相对顺序是不变的,而5的左边是要变的发现在不断地把小的往前面移,且每一个较小的数都会往前最多移动k个但我们不好算每个i往前移k个的数考虑反向处理:算有哪些点可以被......
  • 1255. 得分最高的单词集合
    题目链接:1255.得分最高的单词集合方法:暴力回溯解题思路观察可以发现,本题的数据量范围较小,使用暴力回溯不超过\(2^1\)\(^4\)次,需要注意的有,当选择一个单词时,必须保证当前提供的字符集合中剩余字符能够组成该单词\(check()\),选择以后将字符集合中对应字符数量减少\(destroy()\),......
  • 2574. 左右元素和的差值
    题目链接:2574.左右元素和的差值方法:前缀和+后缀和解题思路第一遍算出\(nums\)数组前缀和,第二遍计算\(answer\)数组。代码classSolution{public:vector<int>leftRigthDifference(vector<int>&nums){intn=nums.size();vector<int>answ......
  • 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
    内卷的来源内卷最早的“出处”是几张名校学霸的图片。大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。之后,“边骑车边看电脑”的“清华卷王”等......