首页 > 代码库 > 中介者模式
中介者模式
一、简介
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 }
中介者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。