C++设计模式-中介者模式
生活随笔
收集整理的這篇文章主要介紹了
C++设计模式-中介者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
?
基本概念
代碼與實例
?
基本概念
中介者模式(Mediator)用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示的相互作用,從而使其耦合松散,而且可以獨立的改變他們之間的關系。
下面是UML圖此圖來源于大話設計模式
?
代碼與實例
程序運行截圖如下:
源碼如下:
Head.h
#ifndef HEAD_H #define HEAD_H#include <iostream> #include <string> using namespace std;class Colleague; class ConcreteColleague1; class ConcreteColleague2;//Mediator類 抽象中介者 class Mediator{public:virtual void send(const string &message, Colleague *colleague);virtual ~Mediator();Mediator();Mediator(Mediator &m);Mediator &operator = (Mediator &m); };// Colleague類 抽象同事類 class Colleague{public:Colleague(Mediator *mediator);~Colleague();protected:Mediator *m_mediator; };// ConcreteMediator類 具體中介者類 class ConcreteMediator: public Mediator{public:void setConcreteColleague1(ConcreteColleague1 *colleague);void setConcreteColleague2(ConcreteColleague2 *colleague);void send(const string &message, Colleague *colleague);~ConcreteMediator();private:ConcreteColleague1 *m_colleague1;ConcreteColleague2 *m_colleague2; };//ConcreteColleague1和ConcreteColleague2等各種同事對象 class ConcreteColleague1: public Colleague{public:ConcreteColleague1(Mediator *mediator);~ConcreteColleague1();void send(const string &message);void notify(const string &message);};class ConcreteColleague2: public Colleague{public:ConcreteColleague2(Mediator *mediator);~ConcreteColleague2();void send(const string &message);void notify(const string &message);};#endifHead.cpp
#include "Head.h" #include <assert.h>void Mediator::send(const string &message, Colleague *colleague) {}Mediator::~Mediator() {cout << "Mediator::~Mediator()" << endl; }Mediator::Mediator() {}Mediator::Mediator(Mediator &m) {}Mediator & Mediator::operator=(Mediator &m) {return Mediator(); }Colleague::Colleague(Mediator *mediator) {m_mediator = mediator; }Colleague::~Colleague() {cout << "Colleague::~Colleague()" << endl; }void ConcreteMediator::setConcreteColleague1(ConcreteColleague1 *colleague) {m_colleague1 = colleague; }void ConcreteMediator::setConcreteColleague2(ConcreteColleague2 *colleague) {m_colleague2 = colleague; }void ConcreteMediator::send(const string &message, Colleague *colleague) {if(colleague == m_colleague1){m_colleague1->notify(message);}else if(colleague == m_colleague2){m_colleague2->notify(message);}else{assert(!"雅喵蝶");} }ConcreteMediator::~ConcreteMediator() {cout << "ConcreteMediator::~ConcreteMediator()" << endl; }ConcreteColleague1::ConcreteColleague1(Mediator *mediator): Colleague(mediator) {}ConcreteColleague1::~ConcreteColleague1() {cout << "ConcreteColleague1::~ConcreteColleague1()" << endl; }void ConcreteColleague1::send(const string &message) {m_mediator->send(message, this); }void ConcreteColleague1::notify(const string &message) {cout << "同事1得到信息: " << message << endl; }ConcreteColleague2::ConcreteColleague2(Mediator *mediator): Colleague(mediator) {}ConcreteColleague2::~ConcreteColleague2() {cout << "ConcreteColleague2::~ConcreteColleague2()" << endl; }void ConcreteColleague2::send(const string &message) {m_mediator->send(message, this); }void ConcreteColleague2::notify(const string &message) {cout << "同事2得到信息: " << message << endl; }main.cpp
#include "Head.h"int main(int *argc, int *argv[]){ConcreteMediator *m = new ConcreteMediator;ConcreteColleague1 *c1 = new ConcreteColleague1(m);ConcreteColleague2 *c2 = new ConcreteColleague2(m);m->setConcreteColleague1(c1);m->setConcreteColleague2(c2);c1->send("吃飯了嗎?");c2->send("你猜!");cout << endl << endl << "---------華麗的分割線---------" << endl << endl;delete m;delete c1;delete c2;getchar();return 0; }這個例子的中介模式,就是通過2個同事通過中介類去對話,這里每一個ConcreteColleague都認識ConcreteMediator,并且每一個ConcreteMediator認識所有的ConcreteColleague。
其中一個很有特點的代碼就是這個:
void ConcreteColleague1::send(const string &message) {m_mediator->send(message, this); }隨后ConcreteMediator在根據傳過來的this,進行傳話。
總結
以上是生活随笔為你收集整理的C++设计模式-中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考系统架构师笔记-综合知识重点(一)
- 下一篇: Qt文档阅读笔记-Qt工作笔记-QTab