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;
    }
    
  • 相关阅读:
    大数据面试(hbase)
    大数据面试(spark)
    大数据面试(kafka)
    ssm整合cas单点登录
    sm整合shiro权限控制
    js中的this机制
    xftp个人版下载
    window.innerHeight属性和用法
    使用elementui图标按钮调整宽高后图标不居中
    git常用的操作记录一下
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3207806.html
Copyright © 2011-2022 走看看