原网址: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);
}
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);
}
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