zoukankan      html  css  js  c++  java
  • 中介者模式

    一、简介

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

    2、成员类

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

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

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

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

    3、UML

     

    4、所属类别:行为型

    二、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 }

     

     

  • 相关阅读:
    python 面向对象编程的三大特征之一 多态
    python 访问控制
    python 面向对象编程的三大特征之一 继承
    朱兆祺教你如何攻破C语言学习、笔试与机试的难点
    如何画好流程图
    2013年个人计划
    30天敏捷结果(1):总体认识Getting Result敏捷方法
    每天一个linux命令目录
    国嵌C语言学习
    【head first python】1.初识python 人人都爱列表
  • 原文地址:https://www.cnblogs.com/bewolf/p/4265207.html
Copyright © 2011-2022 走看看