Mediator模式
    Mediator模式是一种很有用的模式,它通过将对象间的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性。
    面向对象设计激励将行为分布到各个对象中,但这种分布可能会导致对象间有许多连接,在最坏的情况下,每一个对象都知道其他所有对象,
想到了"图"有木有。。。Mediator模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,
从而可以独立地改变它们之间的交互,还有一个优点就是控制集中、便于管理。

C++代码示例:

//colleage.h

#ifndef COLLEAGE_H
#define COLLEAGE_H#include <string>
#include <iostream>using namespace std;class Mediator;class Colleage
{
public:virtual ~Colleage();virtual void Action() = 0;virtual void setState(const string &sta) = 0;virtual string getState() = 0;
protected:Colleage();Colleage(Mediator *med);Mediator* m_med;
};class ConcreteColleageA : public Colleage{public:ConcreteColleageA();ConcreteColleageA(Mediator *med);~ConcreteColleageA();void Action();void setState(const string &sta);string getState();
private:string m_str;
};class ConcreteColleageB : public Colleage{public:ConcreteColleageB();ConcreteColleageB(Mediator* med);~ConcreteColleageB();void Action();void setState(const string &sta);string getState();
private:string m_str;
};#endif // COLLEAGE_H


//colleage.cpp

#include "colleage.h"
#include "mediator.h"Colleage::Colleage(){}Colleage::Colleage(Mediator *med){this->m_med = med;
}Colleage::~Colleage(){}ConcreteColleageA::ConcreteColleageA(){}ConcreteColleageA::~ConcreteColleageA(){}ConcreteColleageA::ConcreteColleageA(Mediator *med): Colleage(med){}string ConcreteColleageA::getState(){return m_str;
}void ConcreteColleageA::setState(const string &sta){m_str = sta;
}void ConcreteColleageA::Action(){m_med->DoActionFromAtoB();cout << "State of ConcreteColleageB: " << this->getState() << endl;
}ConcreteColleageB::ConcreteColleageB(){}ConcreteColleageB::~ConcreteColleageB(){}ConcreteColleageB::ConcreteColleageB(Mediator *med): Colleage(med){}void ConcreteColleageB::Action(){m_med->DoActionFromBtoA();cout << "State of ConcreteColleageA: " << this->getState() << endl;
}string ConcreteColleageB::getState(){return m_str;
}void ConcreteColleageB::setState(const string &sta){m_str = sta;
}

//mediator.h

#ifndef MEDIATOR_H
#define MEDIATOR_Hclass Colleage;class Mediator
{
public:virtual ~Mediator();virtual void DoActionFromAtoB() = 0;virtual void DoActionFromBtoA() = 0;
protected:Mediator();
};class ConcreteMediator : public Mediator{public:ConcreteMediator();ConcreteMediator(Colleage* collA,Colleage* collB);~ConcreteMediator();void setConcreteColleageA(Colleage* collA);void setConcreteColleageB(Colleage* collB);Colleage* getConcreteColleageA();Colleage* getConcreteColleageB();void introColleage(Colleage* collA,Colleage* collB);void DoActionFromAtoB();void DoActionFromBtoA();
private:Colleage *m_collA;Colleage *m_collB;
};#endif // MEDIATOR_H

//mediator.cpp

#include "mediator.h"
#include "colleage.h"Mediator::Mediator(){}Mediator::~Mediator(){}ConcreteMediator::ConcreteMediator(){}ConcreteMediator::~ConcreteMediator(){}ConcreteMediator::ConcreteMediator(Colleage *collA, Colleage *collB){this->m_collA = collA;this->m_collB = collB;
}void ConcreteMediator::DoActionFromAtoB(){m_collB->setState(m_collA->getState());
}void ConcreteMediator::DoActionFromBtoA(){m_collA->setState(m_collB->getState());
}void ConcreteMediator::setConcreteColleageA(Colleage *collA){this->m_collA = collA;
}void ConcreteMediator::setConcreteColleageB(Colleage *collB){this->m_collB = collB;
}Colleage* ConcreteMediator::getConcreteColleageA(){return m_collA;
}Colleage* ConcreteMediator::getConcreteColleageB(){return m_collB;
}void ConcreteMediator::introColleage(Colleage *collA, Colleage *collB){this->m_collA = collA;this->m_collB = collB;
}

//main.cpp

#include "mediator.h"
#include "colleage.h"
#include <iostream>int main()
{ConcreteMediator* m = new ConcreteMediator();ConcreteColleageA* ccA = new ConcreteColleageA(m);ConcreteColleageB* ccB = new ConcreteColleageB(m);m->introColleage(ccA,ccB);ccA->setState("old");ccB->setState("old");ccA->Action();ccB->Action();cout << endl;ccA->setState("new");ccA->Action();ccB->Action();cout << endl;ccB->setState("old");ccB->Action();ccB->Action();return 0;
}

运行结果:




Mediator模式相关推荐

  1. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  2. 设计模式--中介者(Mediator)模式

    模式定义 用一个中介对象来封装(封装变化)一系列的对象交互,中介者使各对象不需要显示的相互引用,从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互 类图 应用场景 当多个对象互相关联交互并 ...

  3. Facade与Mediator模式的区别

    http://www.cnblogs.com/sweetdream/archive/2005/12/19/299983.html 门面(Facade)模式和中介者(Mediator)模式有着共同的目的 ...

  4. 【设计模式系列】行为型模式之Mediator模式

    概要 基于OO来设计经常会产生很多对象,而这些对象之间又会相互交互影响,所以经常会导致对象间的紧耦合,为了能够避免这种紧耦合,就需要一种机制让每个对象能够很方便的跟其他对象交互而又不需要跟这些对象交叉 ...

  5. 设计模式学习笔记——中介者(Mediator)模式

    设计模式学习笔记--中介者(Mediator)模式 @(设计模式)[设计模式, 中介者模式, Mediator] 设计模式学习笔记中介者Mediator模式 基本介绍 中介者案例 类图 实现代码 Me ...

  6. [DP思考录]向左走,向右走: Observer模式 VS Mediator模式

    <<向左走,向右走>>曾经骗去了我无数的眼泪.一首<<遇见>>更是改变了我人生的轨迹.虽然此篇只是技术文章,但借此也缅怀那段颓废的日子: 向左走,向右走 ...

  7. java mediator模式_设计模式之Mediator 中介者模式 - 解道Jdon

    设计模式目录 >> 当前页 设计模式之Mediator(中介者) 板桥里人 http://www.jdon.com 2002/05/05 Mediator中介者模式定义: 用一个中介对象来 ...

  8. Mediator模式(仲裁者设计模式)

    Mediator ? Mediator的意思是"仲裁者""中介者".一方面,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者.当仲裁者 ...

  9. 【笔记整理】图解设计模式 | 第16章 Mediator模式(只有一个仲裁者)

    [笔记整理]图解设计模式 | 导航 定义 组员向仲裁者报告,仲裁者向组员下达指示. 当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者. 当仲裁者下达指示时,组员会立即执行.团 ...

  10. java mediator_Java 实现中介者(Mediator)模式

    类图 public interface IMediator { public void createMediator(); public void work(); } /** * 中介.调节实际上需要 ...

最新文章

  1. python conrurrent
  2. linux下java调用matlab程序,linux_java调用windows_matlab程序
  3. 160个Crackme030之一元一次方程
  4. c语言字符串倒置,单词倒置,用C++实现,将一句话里的单词进行倒置的方法详解
  5. [蓝桥杯2016初赛]密码脱落
  6. 容器对象模式。 一种新的测试模式。
  7. TensorFlow应用实战-17-Qlearning实现迷宫小游戏
  8. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  9. Android小知识-剖析OkHttp中的五个拦截器(上篇)
  10. 北航计算机学硕还是专硕,经验教训-2018二战考研北航计算机
  11. 【渝粤题库】陕西师范大学209015公共经济学作业(高起本、专升本)
  12. Linux中权威域名服务器,请在(7)~(9)处填写恰当的内容。在Linux系统中配置域名服务器,该服务..._考试资料网...
  13. c语言增量pi调节程序,增量式PI控制函数源代码(C语言)
  14. Git 换行符自动转换
  15. 1083 Windy数(数位dp)
  16. vue+element模仿电商商城,前后端分离实现,下单微信扫码支付
  17. html图片自动滚动播放器,jQuery+css实现图片滚动效果(附源码)
  18. 淘宝评论接口调用展示
  19. Vultr VPS开放HTTP端口
  20. Activiti 自定义流程图颜色

热门文章

  1. 程序员该怎样放松?8个好网站推荐(转载)
  2. esting Facts
  3. 神经网络编译器TVM
  4. HTML--学习网教程
  5. vSAN架构细节-分布式RAID
  6. 输入一批整数,输出最大,最小值
  7. 那个站在科学与艺术路口撸码绘的女同学(二)
  8. 分析器错误消息:“xxx.xxx.xxx“不扩展 类“System.Web.UI.Page”,因此此处不允许。
  9. 枪战英雄为什么不显示服务器,枪战英雄Unity3D插件安装常见问题说明
  10. 「无接触实习」你准备好了吗?