前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中介者模式

中介者模式

作者头像
用户1215536
发布2018-02-05 11:30:36
5670
发布2018-02-05 11:30:36
举报

一、简介

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

2、成员类

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

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

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

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

3、UML

4、所属类别:行为型

二、C++程序

代码语言:javascript
复制
  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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档