c++中介者模式
2015-10-21 21:24
302 查看
#include "stdafx.h" #include <iostream> #include <string> using namespace std; typedef string State; class Colleague; class Mediator { public: virtual void AToB() = 0; virtual void BToA() = 0; virtual void IntroColleague(Colleague* pColleagueA, Colleague* pColleagueB) = 0; virtual ~Mediator() {} }; class Colleague { protected: Mediator* m_pMediator; public: Colleague() {} Colleague(Mediator* pMediator):m_pMediator(pMediator){} virtual void Action() = 0; virtual void SetDate(const State& sta) = 0; virtual State GetDate() const = 0; virtual void PrintDate() = 0; }; class ConcreteColleagueA:public Colleague { public: ConcreteColleagueA() {} ConcreteColleagueA(Mediator* pMediator):Colleague(pMediator) {} void SetDate(const State& sta) {m_date = sta;} State GetDate() const {return m_date;} void Action() { m_pMediator->AToB(); } void PrintDate() {cout<<m_date<<endl;} private: State m_date; }; class ConcreteColleagueB:public Colleague { public: ConcreteColleagueB() {} ConcreteColleagueB(Mediator* pMediator):Colleague(pMediator) {} void SetDate(const State& sta) {m_date = sta;} State GetDate() const {return m_date;} void Action() { m_pMediator->BToA(); } void PrintDate() {cout<<m_date<<endl;} private: State m_date; }; class ConcreteMediator:public Mediator { public: void AToB() {m_pColleagueB->SetDate(m_pColleagueA->GetDate());} void BToA() {m_pColleagueA->SetDate(m_pColleagueB->GetDate());} void IntroColleague(Colleague* pColleagueA, Colleague* pColleagueB) { m_pColleagueA = pColleagueA; m_pColleagueB = pColleagueB; } private: Colleague* m_pColleagueA; Colleague* m_pColleagueB; }; int _tmain(int argc, _TCHAR* argv[]) { Mediator* pMediator = new ConcreteMediator; Colleague* pColleagueA = new ConcreteColleagueA(pMediator); Colleague* pColleagueB = new ConcreteColleagueB(pMediator); pMediator->IntroColleague(pColleagueA, pColleagueB); pColleagueA->SetDate("this is A"); pColleagueB->SetDate("this is B"); pColleagueA->PrintDate(); pColleagueB->PrintDate(); pColleagueA->Action(); //after A's change, B is also changed; pColleagueB->PrintDate(); getchar(); return 0; }
相关文章推荐
- 用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数
- C语言:一个球从 100 米落下,每次落地后反跳回原一半,再落下,再反弹。求第10次高度?sum?
- C++ const 限定符
- RAII惯用法:C++资源管理的利器
- c++多线程编程
- 1009. 说反话 (20)
- C语言:有一个分数序列,2/1+3/2+5/3+8/5+13/8+…求出这个数列前 20 项的和
- C++中尖括号和引号的区别---转载
- C++学习——模板与异常处理
- C++ 中捕获整数除零错误
- C++学习——继承
- c语言中预编译
- c++学习——类
- C++学习——函数
- 1012. 数字分类 (20)
- C++学习——数组、指针与引用
- C++学习——数据类型与运算符
- C++区分成员变量
- 【C++】对cin输入字符的判断与分段函数的处理
- C++ learning notes - Function