中介者模式 C++ 实现
2024-10-18 23:33:27
#include<iostream>
#include<string>
#include<vector>
#include<cstdlib> using namespace std;
/*
mediator 模式
问题:重在理解,结构图见网络。
*/
class colleage
{
private:
string name;
string content;
public:
colleage(string n = " "):name(n)
{}
void set_name(string name)
{
this->name = name;
} string get_name()
{
return this->name;
} void set_content(string content)
{
this->content = content;
} string get_content()
{
return this->content;
} virtual void talk()
{ }
}; class monitor: public colleage
{
public:
monitor(string n = " "):colleage(n)
{ } void talk()
{
cout <<"monitor says:"<<get_content()<< endl;
} }; class tuanzishu: public colleage
{
public:
tuanzishu(string n = " "):colleage(n)
{ } void talk()
{
cout <<"tuanzishu say:"<<get_content()<< endl;
} }; class studentA: public colleage
{ public:
studentA(string n = " "):colleage(n)
{ } void talk()
{
cout <<"studentA say:"<< get_content()<< endl;
} }; class studentB: public colleage
{ public:
studentB(string n = " "):colleage(n)
{ } void talk()
{
cout <<"studentB say:"<<get_content()<< endl;
} }; class mediator
{
public:
vector<colleage*> studentlist;
virtual void add_students(colleage *student)
{
studentlist.push_back(student);
} }; class QQmediator: public mediator
{
public:
virtual void notify(colleage *student)
{
student->talk();
for(int i = 0; i < studentlist.size(); i++)
{
if(student != studentlist[i])
{
studentlist[i]->talk();
}
}
}
virtual void chart(colleage *student1, colleage *student2)
{
student1->talk();
student2->talk();
} }; int main()
{//初始化
QQmediator qq;
monitor studentmonitor("banzhang");
tuanzishu studenttuanzishu("tuanzishu");
studentA studentXM("xiaoming");
studentB studentXH("xiaohong"); //向中介者中添加同学 qq.add_students(&studentmonitor);
qq.add_students(&studenttuanzishu);
qq.add_students(&studentXM);
qq.add_students(&studentXH); //设置各位同学的回复 studentmonitor.set_content("班会现在开始,请大家积极发言。");
studenttuanzishu.set_content("班会主题是XXXXX");
studentXM.set_content("我认为XXXXX");
studentXH.set_content("我不认为XXXX"); //班长通知后开始 cout <<"班长发布一个通知后的情景:"<< endl;
qq.notify(&studentmonitor); //同学私聊 cout <<"同学私聊的情景:"<< endl;
studentXM.set_content("你觉得今天的班会怎么样?");
studentXH.set_content("一般般吧,还是老样子,没解决什么问题");
qq.chart(&studentXM,&studentXH); system("pause");
return 0;
}
总结: 无。详见参考:点击打开链接
最新文章
- opendaylight的Beryllium安装
- mongodb中的副本集搭建实践
- java网络---查找Internet
- MVC中Controller和Action讲解上篇
- 【HDOJ】1401 Solitaire
- FileWriter类的flush方法的作用
- iOS常用的封装方法
- 利用jQuery接受和处理xml数据
- 寻找数列中第k大的数算法分析
- [转]Qt5.0 连接 webkit 错误解决
- 添加Metasploit-payload到已有的Android项目中
- JavaScript中对象数组 作业 题目如下
- Python中使用多进程来实现并行处理的方法小结
- 蓝桥杯试题 k倍区间(dp)
- 哨兵模式下,master选举关键点
- sitecore系列教程之Sitecore个性化-体验概况概述
- ALGO-22_蓝桥杯_算法训练_装箱问题(DP)
- 联机分析处理ROLAP、MOLAP和HOLAP区别(转)
- collections集合的总括。
- 提供openssl -aes-256-cbc兼容加密/解密的简单python函数