设计模式——中介者模式/调停者模式(C++实现)

  1 #include <iostream>
  2 #include <string>
  3
  4 using namespace std;
  5
  6 class Colleague;
  7
  8 class Mediator
  9 {
 10 public:
 11         virtual void Send(string strMessage, Colleague* pstColleague) = 0;
 12 };
 13
 14 class Colleague
 15 {
 16 public:
 17         Colleague(Mediator* pstMediator): m_pstMediator(pstMediator)
 18         {
 19
 20         }
 21
 22         virtual void Send(string strMes) = 0;
 23
 24         virtual void Notify(string strMes) = 0;
 25
 26 protected:
 27         Mediator* m_pstMediator;
 28 };
 29
 30 class ConcreteColleagueA: public Colleague
 31 {
 32 public:
 33         ConcreteColleagueA(Mediator* pstMediator):Colleague(pstMediator)
 34         {
 35
 36         }
 37
 38         virtual void Send(string strMsg)
 39         {
 40                 m_pstMediator->Send(strMsg, this);
 41
 42         }
 43
 44         virtual void Notify(string strMes)
 45         {
 46                 cout<< "同事1得到消息: "<< strMes<< endl;
 47         }
 48 };
 49
 50 class ConcreteColleagueB: public Colleague
 51 {
 52 public:
 53         ConcreteColleagueB(Mediator* pstMediator):Colleague(pstMediator)
 54         {
 55
 56         }
 57
 58         virtual void Send(string strMsg)
 59         {
 60                 m_pstMediator->Send(strMsg, this);
 61
 62         }
 63
 64         virtual void Notify(string strMes)
 65         {
 66                 cout<< "同事2得到消息: "<< strMes<< endl;
 67         }
 68 };
 69
 70 class ConcreteMediator: public Mediator
 71 {
 72 public:
 73         void SetColleagueA(ConcreteColleagueA* pstColleague)
 74         {
 75                 m_pstColleagueA = pstColleague;
 76         }
 77
 78         void SetColleagueB(ConcreteColleagueB* pstColleague)
 79         {
 80                 m_pstColleagueB = pstColleague;
 81         }
 82
 83         virtual void Send(string strMes, Colleague* pstColleague)
 84         {
 85                 if (pstColleague == m_pstColleagueA)
 86                 {
 87                         m_pstColleagueB->Notify(strMes);
 88                 }
 89                 else
 90                 {
 91                         m_pstColleagueA->Notify(strMes);
 92                 }
 93         }
 94
 95 private:
 96         ConcreteColleagueA* m_pstColleagueA;
 97         ConcreteColleagueB* m_pstColleagueB;
 98 };
 99
100 int main(int argc, char* argv[])
101 {
102         ConcreteMediator* pstMediatorA = new ConcreteMediator();
103
104         ConcreteColleagueA* pstColleagueA = new ConcreteColleagueA(pstMediatorA);
105         ConcreteColleagueB* pstColleagueB = new ConcreteColleagueB(pstMediatorA);
106
107         pstMediatorA->SetColleagueA(pstColleagueA);
108         pstMediatorA->SetColleagueB(pstColleagueB);
109
110
111         pstColleagueA->Send("How are you?");
112         pstColleagueB->Send("I am fine, Thank You!");
113
114         return 0;
115 }
116 ////////////////////////////////////////////
117 [[email protected] ~/learn_code/design_pattern/21_mediator]$ ./mediator
118 同事2得到消息: How are you?
119 同事1得到消息: I am fine, Thank You!
时间: 2024-10-28 14:28:10

设计模式——中介者模式/调停者模式(C++实现)的相关文章

设计模式之解释器、调停者模式

解释器模式和调停者模式都是行为型模式,由于二者用的情形比较少,不作过多解读,介绍一下相关概念,以作参考. 解释器模式有点儿“编译器”的概念,像个超级简单的编译器,且跟硬件无关,它的目的是定义语言(使用规定格式和语法的代码)的文法,然后建立一个解释器来解释该语言中的句子. 在 GOF 的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子.这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题.而且当文法简单.效率不是关键问题的时候效

java设计模式9.备忘录模式、访问者模式、调停者模式

备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态,备忘录模式常与命令模式和迭代子模式一起使用. 访问者模式 访问者的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变.访问者模式使适用于数据结构相对未定的系统,它把数据结构和作用于结构之上的操作解耦. 抽象访问者角色

调停者模式

调停者模式 调停者模式是对象的行为模式,调停者模式包装了一系列对象相互作用的方式,使得这些对象不必明显引用.从而他们之间的耦合度就会降低,调停者模式类似于电脑的主板和各个组件的交互.        调停者模式包括以下角色:       ●      抽象调停者(Mediator)角色:定义出同事对象到调停者对象的接口,其中主要方法是一个(或多个)事件方法. ● 具体调停者(ConcreteMediator)角色:实现了抽象调停者所声明的事件方法.具体调停者知晓所有的具体同事类,并负责具体的协调各

深入浅出设计模式——中介者模式(Mediator Pattern)

模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题:? 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理.? 对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱.? 系统扩展性低:增加一个新的对象需要在原有相关对象上增加引用,增加新的引用关系也需要调整原有对象,系统

24种设计模式--中介者模式【Mediator Pattern】

各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一个软件公司,要开发软件,需要开发环境吧, Windows 操作系统,数据库产品等,这你得买吧,那就是采购,开发完毕一个产品还要把产品推销出去,推销出去了大家才有钱赚,不推销出去大家都去喝西北风呀,既然有产品就必然有库存,软件产品也有库存,你总要拷贝吧,虽然是不需要占用库房空间,那也是要占用光盘或硬盘

JAVA设计模式之调停者模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用.从而保证这些相互作用可以彼此独立地变化. 为什么需要调停者 如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象.这

Java设计模式之《调停者模式》及应用场景

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html 调停者模式. 我们想象一下这样的场景:一个系统内部通过许多的类互相之间相互调用来完成一系列的功能,这个系统内部的每个类都会存在至少一次的调用与被调用,多者数不胜数,这种情况下,一旦某个类发生问题,进行修改,无疑会影响到所有调用它的类,甚至它调用的类,可见这种情况下,类与类之间的耦合性极高(体现为太多的复杂的直接引用). 这正是调停者模式的主场,调停者犹如第三方中介一

《Java设计模式》之调停者模式(Mediator)

调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们能够较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会马上影响到其它的一些对象之间的相互作用. 从而保证这些相互作用能够彼此独立地变化. 为什么须要调停者 例如以下图所看到的.这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此经常叫做同事(Colleague)对象.这些同事对象通过彼此的相互作用形成系统的行为.从图中能够看出.差点儿每个对象都须

【C#设计模式-中介者模式】

一.概述:中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系.中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为. 二.例子:QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用. 三.结构: 者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:抽象中介者角色,具体中介者角色.抽象同事类和具体同事类.中介者类是起到协调各