C++设计模式——中介者模式(高屋建瓴)

在这里插入图片描述

原网址:https://blog.csdn.net/wuzhekai1985/article/details/6673603

做如下修改:
#include <iostream>
using namespace std;
class Mediator;
// 抽象人
class Person {
 public:
  virtual void SetMediator(Mediator *mediator){}//设置中介
  virtual void SendMessage(std::string message) {}//向中介者发送信息
  virtual void GetMessage(std::string message) {} //从中介者获取信息
 protected:
  Mediator *mediator_;
};

//抽象中介结构
class Mediator {
 public:
  virtual void Send(std::string message, Person *person){}
  virtual void SetRenter(Person *renter) {} //设置租客
  virtual void SetLandLoad(Person *land_load) {} //设置房东
};

//租房者
class Renter :public Person {
 public:
  void SetMediator(Mediator *mediator) {
    mediator_ = mediator;
  }
  void SendMessage(std::string message) {
    mediator_->Send(message, this);//在这个Send函数里会判断this是来自租房者还是房东
  }

  //房屋中介类里面调用
  void GetMessage(string message) {
    cout << "Renter Get Message"<< endl;
  }
};

//房东
class LandLord : public Person {
 public:
  void SetMediator(Mediator *mediator) {
    mediator_ = mediator;
  }
  void SendMessage(std::string message) {
    mediator_->Send(message, this);//在这个Send函数里会判断this是来自租房者还是房东
  }

  //房屋中介类里面调用
  void GetMessage(string message) {
    cout << "LandLoad Get Message"<< endl;
  }
};

//房屋中介
class HouseMediator : public Mediator {
 public:
  HouseMediator():renter_(NULL),land_load_(NULL) {}
  void SetRenter(Person *renter) {
    renter_ = renter;
  }
  void SetLandLoad(Person * land_load) {
    land_load_ = land_load;
  }
  void Send(std::string message, Person *person) {
    if (person == renter_) {
      land_load_->GetMessage(message);
    } else {
      renter_->GetMessage(message);
    }
  }

 private:
  Person *renter_;
  Person *land_load_;
};

int main () {
  Mediator *mediator = new HouseMediator();
  Person *renter = new Renter(); //租房者
  Person *land_load = new LandLord(); //房东
  mediator->SetRenter(renter);
  mediator->SetLandLoad(land_load);

  renter->SetMediator(mediator);
  land_load->SetMediator(mediator);
  renter->SendMessage("我想在南京路附近租套房子,价格800元一个月\n");
  land_load->SendMessage("出租房子:南京路100号,70平米,1000元一个月\n");
  delete mediator;
  delete renter;
  delete land_load;
  return 0;
}
LandLoad Get Message
Renter Get Message
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值