中介者模式 C++ 实现
#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;
}
总结: 无。详见参考:点击打开链接
中介者模式 C++ 实现的更多相关文章
- 23种设计模式--中介者模式-Mediator Pattern
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...
- MediatorPattern(中介者模式)
/** * 中介者模式 * @author TMAC-J * 研究了这么多设计模式,觉得无非就是几点: * 1.若两个类有耦合关系,设立一个中间类,处理两个类的关系,把两个类的耦合降低 * 2.面向接 ...
- C#设计模式-中介者模式
在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...
- php实现设计模式之 中介者模式
<?php /* * 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ /* * 以一个同学qq群为例说明, ...
- 轻松掌握:JavaScript代理模式、中介者模式
代理模式.中介者模式 代理模式 在面向对象设计中,有一个单一职责原则,指就一个类(对象.函数)而言,应该仅有一个引起它变化的原因.如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就 ...
- java设计模式之中介者模式
中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式UML图 中介者模式代码 package com ...
- 中介者模式(Mediator Pattern)
定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. Mediator:中介者接口.在里面定义了各个同事之间相互交互所 ...
- C++设计模式-Mediator中介者模式
Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事类 ...
- JAVA 设计模式 中介者模式
用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...
- (七)中介者模式-C++实现
用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其解耦合松散而且可以独立地改变他们之间的交互. 中介者模式适合于 系统中不希望对象之间直接交互,即不希望类之间相互包含, ...
随机推荐
- php MySQLi部分函数(面向对象和过程)
版本支持:PHP > 5.0 MySQL > 4.0 2. mysqli 连接数据库: $db = new mysqli(host,user,password,database);返回一 ...
- 如何使用银联卡充值美元到BTC-E以及比特币搬砖教程
1,名词解释 搬砖:就是在价格低的平台买入比特币,然后转移到价格高的平台卖出, 一般而言,BTC-E是国外三大比特币交易所中比特币单价最低的一个站,因为其需要用美元充值,相对不方便.之前国内比特币价格 ...
- 各国iPhone5系列最新裸机价格
美国/加拿大/中国香港/中国大陆iPhone5系列最新裸机价格
- paip.输入法编程---输入法ATIaN历史记录 c823
paip.输入法编程---输入法ATIaN历史记录 c823 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...
- Office 365 - SharePoint 2013 Online之加入App开发工具Napa
1.新建一个站点集,模板选择开发者模板.例如以下图: 2.确定以后,须要稍等一会儿; 3.点击站点内容,加入app,例如以下图: 4.进入SharePoint Store.选择Napa.例如以下图: ...
- WPF实现界面动态布局
曾经总认为动态布局是个非常麻烦的问题.是个非常须要功力的问题.可是貌似在.NET中,在WPF中却不是那么的麻烦.以下介绍我如今实现的一个动态布局的实例. 由于有需求,所以困难得克服!而我们的需求表名. ...
- UNIX网络编程 卷2:进程间通信
这篇是计算机类的优质预售推荐>>>><UNIX网络编程 卷2:进程间通信(第2版)> UNIX和网络专家W. Richard Stevens的传世之作 编辑推荐 两 ...
- JVM-- 先行发生原则
本文中需要的基础知识:指令重排 线程中两个非常重要的问题就是:原子性与可见性. 而下面的先行发生原则就是用来解决可见性问题的. 先行发生原则--是判断是否存在数据竞争.线程是否安全的主要依据. 先行发 ...
- django学习之Model(一)
认认真真学Django,从现在开始. 学习资料来源于官方网站:https://docs.djangoproject.com/en/1.6/ 1-新建一个models.py from django.db ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...