频道栏目
首页 > 资讯 > Java > 正文

设计模式学习-----中介者模式

12-12-14        来源:[db:作者]  
收藏   我要投稿

  GOOD:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。

 
 

[html] 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 
 
class Colleague; 
//中介者类 
class Mediator 

public: 
    virtual void Send(string message,Colleague* col) = 0; 
}; 
//抽象同事类 
class Colleague 

protected: 
    Mediator* mediator; 
public: 
    Colleague(Mediator* temp) 
    { 
        mediator = temp; 
    } 
}; 
//同事一 
class Colleague1 : public Colleague 

public: 
    Colleague1(Mediator* media) : Colleague(media){} 
 
    void Send(string strMessage) 
    { 
        mediator->Send(strMessage,this); 
    } 
 
    void Notify(string strMessage) 
    { 
        cout<<"同事一获得了消息"<<strMessage<<endl; 
    } 
}; 
 
//同事二 
class Colleague2 : public Colleague 

public: 
    Colleague2(Mediator* media) : Colleague(media){} 
 
    void Send(string strMessage) 
    { 
        mediator->Send(strMessage,this); 
    } 
 
    void Notify(string strMessage) 
    { 
        cout<<"同事二获得了消息"<<strMessage<<endl; 
    } 
}; 
 
//具体中介者类 
class ConcreteMediator : public Mediator 

public: 
    Colleague1 * col1; 
    Colleague2 * col2; 
    virtual void Send(string message,Colleague* col) 
    { 
        if(col == col1) 
            col2->Notify(message); 
        else  
            col1->Notify(message); 
    } 
}; 
 
//客户端: 
int main() 

    ConcreteMediator * m = new ConcreteMediator(); 
 
    //让同事认识中介 
    Colleague1* col1 = new Colleague1(m); 
    Colleague2* col2 = new Colleague2(m); 
 
    //让中介认识具体的同事类 
    m->col1 = col1; 
    m->col2 = col2; 
 
    col1->Send("吃饭了吗?"); 
    col2->Send("还没吃,你请吗?"); 
    return 0; 

 
 

相关TAG标签
上一篇:Oracle中from中子查询实例应用
下一篇:MYSQL入门学习之八:数据库及表的基本操作
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站