#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++ 实现的更多相关文章

  1. 23种设计模式--中介者模式-Mediator Pattern

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

  2. MediatorPattern(中介者模式)

    /** * 中介者模式 * @author TMAC-J * 研究了这么多设计模式,觉得无非就是几点: * 1.若两个类有耦合关系,设立一个中间类,处理两个类的关系,把两个类的耦合降低 * 2.面向接 ...

  3. C#设计模式-中介者模式

    在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...

  4. php实现设计模式之 中介者模式

    <?php /* * 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ /* * 以一个同学qq群为例说明, ...

  5. 轻松掌握:JavaScript代理模式、中介者模式

    代理模式.中介者模式 代理模式 在面向对象设计中,有一个单一职责原则,指就一个类(对象.函数)而言,应该仅有一个引起它变化的原因.如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就 ...

  6. java设计模式之中介者模式

    中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式UML图 中介者模式代码 package com ...

  7. 中介者模式(Mediator Pattern)

    定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. Mediator:中介者接口.在里面定义了各个同事之间相互交互所 ...

  8. C++设计模式-Mediator中介者模式

    Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事类 ...

  9. JAVA 设计模式 中介者模式

    用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...

  10. (七)中介者模式-C++实现

    用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其解耦合松散而且可以独立地改变他们之间的交互. 中介者模式适合于 系统中不希望对象之间直接交互,即不希望类之间相互包含, ...

随机推荐

  1. bootstrap base css 基本css

    Headings All HTML headings, <h1> through <h6> are available. h1. Heading 1 h2. Heading 2 ...

  2. Python文本处理(1)

    每次处理一个字符 解决方法: 创建列表 thestring='abcdefg' thelist=list(thestring) print thelist 结果 ['a', 'b', 'c', 'd' ...

  3. CMake入门指南

    原文地址:http://www.cnblogs.com/sinojelly/archive/2010/05/22/1741337.html CMake是一个比make更高级的编译配置工具,它可以根据不 ...

  4. 华为HCNA教程(笔记)

    第一章 VRP操作基础 1VRP基础 MiniUsb串口连接交换机的方法 2eNSP入门 3命令行基础(1) eNSP中路由开启后(记住port)---第三方软件连接该路由方法:telnet 127. ...

  5. 云计算与虚拟化以及IaaS, PaaS和SaaS

    概述: 包括:服务器虚拟化.桌面虚拟化.应用虚拟化: 云计算只是用到了虚拟化的技术: soa dubbo结构,阿里巴巴的开源架构: netstat -ntlp; 云服务”现在已经快成了一个家喻户晓的词 ...

  6. Android--开发过程中使用到的长度单位

    px:表示屏幕实际的像素. in:表示英寸. mm:毫米. pt:表示一个点,是屏幕的物理尺寸. dp:(与密度无关的像素)逻辑长度单位,在160dpi屏幕上,1dp = 1px = 1/160英寸 ...

  7. 分享非常有用的Java程序 (关键代码) (三)---创建ZIP和JAR文件

    原文:分享非常有用的Java程序 (关键代码) (三)---创建ZIP和JAR文件 import java.util.zip.*; import java.io.*; public class Zip ...

  8. Maven和Eclipse联合开发(转)

    最近公司突然把以前的架构推到从来,这个还真需要勇气,不过也是的,基础不好,再好的房子也站不稳.公司采用Maven作为项目管理,WebService项目框架采用SDHI.(Spring+Dubbo+He ...

  9. C# MVC 自学笔记—5 添加模型

    ==============================翻译============================== 在本节中,您将添加一些类来管理数据库中的电影.这些类将 ASP.NET M ...

  10. JDBC连接SQL server与ADO.NET连接Sql Server对比

    JDBC连接SQL server与ADO.NET连接Sql Server对比 1.JDBC连接SQL server 1)java方面目前有很多驱动能够驱动连接SQL servernet.   主流的有 ...