首页 > 代码库 > 中介者模式

中介者模式

一、简介

1、中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的交互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

2、成员类

Mediator:中介者接口。在里面定义了各个同事之间相互交互所需要的方法

ConcreteMediator:具体的中介者实现对象。它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

Colleague:同事类的定义,通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能。

ConcreteColleague:具体的同事类,实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

二、C++程序

 

  1 // 中介者模式.cpp : 定义控制台应用程序的入口点。  2 //  3   4 #include "stdafx.h"  5 #include<iostream>  6 #include<string>  7 using namespace std;  8 class Colleage  9 { 10 public: 11     Colleage(){} 12     virtual~Colleage(){} 13 }; 14 class Mediator 15 { 16 public: 17     Mediator(){} 18     virtual ~Mediator(){} 19     virtual void declare(string ,Colleage *)=0; 20 }; 21  22 class Concretecolleage1:public  Colleage 23 { 24 private: 25     Mediator *mediator; 26 public: 27     Concretecolleage1(Mediator * m) 28     { 29         mediator=m; 30     } 31     virtual~Concretecolleage1(){} 32     void talk(string s) 33     { 34         mediator->declare(s,this); 35     } 36     void receive(string s) 37     { 38         cout<<"Concretecolleage1接收到对方的消息:"<<s<<endl; 39     } 40 }; 41 class Concretecolleage2:public  Colleage 42 { 43 private: 44     Mediator *mediator; 45 public: 46     Concretecolleage2(Mediator * m) 47     { 48         mediator=m; 49     } 50     virtual~Concretecolleage2(){} 51     void talk(string s) 52     { 53         mediator->declare(s,this); 54     } 55     void receive(string s) 56     { 57         cout<<"Concretecolleage2接收到对方的消息:"<<s<<endl; 58     } 59 }; 60 class Concretemediator:public Mediator 61 { 62 private: 63     Concretecolleage1 *concretecolleage1; 64     Concretecolleage2 *concretecolleage2; 65 public: 66     Concretemediator(){}     67     virtual ~Concretemediator(){} 68     void setConcretecolleage1(Concretecolleage1 * value) 69     { 70         concretecolleage1=value; 71     } 72     void setConcretecolleage2(Concretecolleage2 * value) 73     { 74         concretecolleage2=value; 75     } 76     virtual void declare(string s,Colleage * m) 77     { 78         if(m==concretecolleage1) 79         { 80             concretecolleage2->receive(s); 81         } 82  83         if(m==concretecolleage2) 84         { 85             concretecolleage1->receive(s); 86         } 87     } 88 }; 89  90  91 int _tmain(int argc, _TCHAR* argv[]) 92 { 93     //设置两个要通信的人和一个中介者 94     Concretemediator *phone=new Concretemediator(); 95     Concretecolleage1 * xie=new Concretecolleage1(phone); 96     Concretecolleage2 * lala=new Concretecolleage2(phone); 97     phone->setConcretecolleage1(xie); 98     phone->setConcretecolleage2(lala); 99     xie->talk("去吃饭吧?");100     lala->talk("好的呀,马上就走");101     return 0;102 }

 

 

 

 

中介者模式