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;
    }
    
  • 相关阅读:
    C# 多线程 弹出模态MessageBox的一种方法
    CentOS 7安装Docker
    CentOS 6 安装Docker
    docker三要素
    openstack_dashboard无法获取nova
    cinder安装与配置
    Dashboard安装与配置
    openstack-neutron安装与配置
    openstack在controller节点使用openstack network agent list不显示计算节点
    nova安装与配置
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3207806.html
Copyright © 2011-2022 走看看