zoukankan      html  css  js  c++  java
  • 设计模式之中介者模式(Mediator)

    中间者模者模式原理:中介者维持所有要交互对象的指针或者对象,所有对象维持一个中介者的指针或者对象。

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Mediator;
    class Person
    {
    public:
    	virtual GetMessage(string message)
    	{
    
    	}
    	virtual void SendMessage(string message)
    	{
    		
    	}
    	virtual void SetMediator(Mediator *pmdiator)
    	{
    
    	}
    protected:
    	Mediator *m_pmediator; 
    };
    
    class Mediator
    {
    public:
    	void Send(string message,Person *person)
    	{
    		if (person == m_renter)
    		{
    			m_landlord->GetMessage(message);
    		}
    		else
    		{
    			m_renter->GetMessage(message);
    		}
    	}
    	void SetRenter(Person *prenter)
    	{
    		m_renter = prenter;
    	}
    	void SetLandlord(Person *plandlord)
    	{
    		m_landlord = plandlord;
    	}
    private:
    	Person *m_renter;
    	Person *m_landlord;
    };
    
    class Renter:public Person
    {
    public:
    	virtual GetMessage(string message)
    	{
    		cout << "租客收到租房信息:"<<message<<endl;
    	}
    	virtual void SendMessage(string message)
    	{
    		m_pmediator->Send(message,this);
    	}
    	virtual void SetMediator(Mediator *pmediator)
    	{
    		m_pmediator = pmediator;
    	}
    };
    class Landlord:public Person
    {
    public:
    	virtual GetMessage(string message)
    	{
    		cout << "房东收到租房信息:"<<message<<endl;
    	}
    	virtual void SendMessage(string message)
    	{
    		m_pmediator->Send(message,this);
    	}
    	virtual void SetMediator(Mediator *pmediator)
    	{
    		m_pmediator = pmediator;
    	}
    };
    
    
    
    
    int main()
    {
    	Mediator *pmediator = new Mediator();
    	Person *prenter = new Renter();
    	Person *plandlord = new Landlord();
    
    	pmediator->SetLandlord(plandlord);
    	pmediator->SetRenter(prenter);
    	prenter->SetMediator(pmediator);
    	plandlord->SetMediator(pmediator);
    
    	prenter->SendMessage("我要租一个有网的房子");
    	plandlord->SendMessage("我现在有一个两室一厅的房子要出租");
    	return 0;
    }
    
  • 相关阅读:
    sqlserver 行转列 语文,数学,物理,化学
    除去字符串中不相临的重复的字符 aabcad 得 aabcd
    Mvc项目实例 MvcMusicStore 五
    c# 计算两日期的工作时间间隔(排除非工作日)及计算下一个工作时间点.
    html-----016---HTTP 状态消息
    html-----015---HTML ASCII 参考手册
    html-----014---统一资源定位器
    html-----013----实体字符/HTML URL 编码
    html-----012---颜色的改变
    html-----011--子窗体iframe
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3207806.html
Copyright © 2011-2022 走看看