zoukankan      html  css  js  c++  java
  • 设计模式复习-中介者模式

    #pragma once
    #include "stdafx.h"
    #include<map>
    #include<set>
    #include<string>
    #include<iostream>
    using namespace std;
    
    /*
    	设计模式-中介者模式(Mediator)
    	用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要
    显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
    中介者模式的有点来自集中控制,其缺点也是他,中介者模式一般应用于一组对象
    定义良好但是复杂的方式进行通讯的场合,以及想定制一个分布式在多个类中的行为,
    而又不想生成太多的子类的场合。
    */
    
    class CMediator {//抽象中介者
    public:
    	virtual void Send(const string &strPeople, const string &strMessage) = 0;
    };
    
    class CColleague {//抽象同事类
    protected:
    	CMediator *mpMediator;
    public:
    	CColleague(CMediator *pMediator) {
    		mpMediator = pMediator;
    	}
    	virtual void Notify(const string &strMessage) = 0;
    };
    
    class CConcreteColleague1 :public CColleague {//同事类1
    public:
    	CConcreteColleague1(CMediator *pMediator) :CColleague(pMediator) {}
    	void Send(const string &strPeople, const string &strMessage) {
    		mpMediator->Send(strPeople , strMessage);
    	}
    	void Notify(const string &strMessage) {
    		cout << "tong shi 1 de dao xin xi:" << strMessage << endl;
    	}
    };
    
    class CConcreteColleague2 :public CColleague {//同事类2
    public:
    	CConcreteColleague2(CMediator *pMediator) :CColleague(pMediator) {}
    	void Send(const string &strPeople, const string &strMessage) {
    		mpMediator->Send(strPeople, strMessage);
    	}
    	void Notify(const string &strMessage) {
    		cout << "tong shi 2 de dao xin xi:" << strMessage << endl;
    	}
    };
    
    class CConcreteMediator :public CMediator {//具体中介者类
    private:
    	map<string, CColleague*>mpColleague;
    public:
    	CConcreteMediator() {mpColleague.clear();}
    	void Send(const string &strPeople, const string &strMessage) {
    		mpColleague[strPeople]->Notify(strMessage);
    	}
    	void AddColleague(const string &strPeople ,CColleague * pColleague) {
    		mpColleague[strPeople] = pColleague;
    	}
    };
    
    
    int main() {
    
    	CConcreteMediator *pM = new CConcreteMediator();
    	CConcreteColleague1 *pC1 = new CConcreteColleague1(pM);
    	CConcreteColleague2 *pC2 = new CConcreteColleague2(pM);
    	pM->AddColleague("pC1", pC1);
    	pM->AddColleague("pC2", pC2);
    
    	pC1->Send("pC2","chi fan mei?");
    	pC2->Send("pC1", "mei ne");
    
    	delete pM, delete pC1, delete pC2;
    
    	getchar();
    	return 0;
    }

  • 相关阅读:
    visio中插入顶边大括号
    undefined reference to `SetPduPowerConsumptionCnt'的解决办法
    JMS : Java Message Service (Java消息服务)
    C#自己编写的一个函数 可以删除字符串中指定开头和结尾中间的字符串
    完全JSP分页代码
    用ASP+Access创建网站RSS格式内容摘要
    微软考试杭州考点
    split 分隔字符串
    JSP连接SQL Server 2000系统配置
    全球测试管理系统TestDirector(上)
  • 原文地址:https://www.cnblogs.com/csnd/p/12061906.html
Copyright © 2011-2022 走看看