mediator模式

將對象封裝在類似中介的類中,對象之間的通信他們本身不用關心

mediator.h

#ifndef _MEDIATOR_H

#define _MEDIATOR_H

#include <iostream>

#include <string>

using namespace std;

class Mediator

{

public:

Mediator() {

}

~Mediator() {

}

virtual void DoActionFromAtoB()=0;

virtual void DoActionFromBtoA()=0;

};

class Colleage

{

public:

virtual ~Colleage() {

}

virtual void Action()=0;

Colleage() {

}

Colleage(Mediator* mdt) : _mdt(mdt) {

}

public:

Mediator* _mdt;

string _sdt;

};

class ConcreteColleageA : public Colleage

{

public:

ConcreteColleageA() {

}

ConcreteColleageA(Mediator* mdt) : Colleage(mdt) {

}

~ConcreteColleageA() {

}

void Action() {

_mdt->DoActionFromAtoB();

cout << "state of concreteColleageA:" << _sdt << endl;

}

public:

string _sdt;

};

class ConcreteColleageB : public Colleage

{

public:

ConcreteColleageB() {

}

ConcreteColleageB(Mediator* mdt) : Colleage(mdt) {

}

~ConcreteColleageB() {

}

void Action() {

_mdt->DoActionFromBtoA();

cout << "state of concreteColleageB:" << _sdt << endl;

}

public:

string _sdt;

};

class ConcreteMediator : public Mediator

{

public:

ConcreteMediator() {

}

~ConcreteMediator() {

}

ConcreteMediator(Colleage* clgA, Colleage* clgB) : _clgA(clgA), _clgB(clgB) {

}

void DoActionFromAtoB() {

_clgB->_sdt = _clgA->_sdt;

}

void DoActionFromBtoA() {

_clgA->_sdt = _clgB->_sdt;

}

void IntroColleage(Colleage* clgA, Colleage* clgB) {

_clgA = clgA;

_clgB = clgB;

}

public:

Colleage* _clgA;

Colleage* _clgB;

};

#endif // _MEDIATOR_H

mediator.cpp

#include "mediator.h"

int main()

{

ConcreteMediator* m = new ConcreteMediator;

ConcreteColleageA* c1 = new ConcreteColleageA(m);

ConcreteColleageB* c2 = new ConcreteColleageB(m);

m->IntroColleage(c1, c2);

c1->_sdt = "old";

c2->_sdt = "old";

c1->Action();

c2->Action();

c1->_sdt = "new";

c1->Action();

c2->Action();

c2->_sdt = "old";

c2->Action();

c1->Action();

return 0;

}

編譯: make?mediator

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,924評論 18 139
  • //出自51博客:www.Amanda0928.51.com 第一章 一、選擇題 1.B; (typedef ,t...
    Damongggggg閱讀 11,196評論 0 1
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,523評論 0 17
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,835評論 0 11