中介者模式
夫妻两吵架,不和对方说话,这时候怎么办呢,需要一个儿子中间转发信息。
class Mediator;
class Person
{
protected:
Mediator *m_mediator;
public:
virtual void SetMediator(Mediator *mediator){}
virtual void Speak(string message) {}
virtual void Listen(string message) {}
};
class Mediator
{
public:
virtual void Send(string message, Person *person) {}
virtual void SetMan(Person *A) {}
virtual void SetWoman(Person *B) {}
};
class Man: public Person
{
public:
void SetMediator(Mediator *mediator) { m_mediator = mediator; }
void Speak(string message) { m_mediator->Send(message, this); }
void Listen(string message) { cout<<"From my husband"<<message; }
};
class Woman: public Person
{
public:
void SetMediator(Mediator *mediator) { m_mediator = mediator; }
void Speak(string message) { m_mediator->Send(message, this); }
void Listen(string message) { cout<<"From my wife"<<message; }
};
class Son: public Mediator
{
private:
Person *Man;
Person *Woman;
public:
Son(): m_Man(0), m_Woman(0) {}
void SetMan(Person *man) { m_Man = man; }
void SetWomen(Person *woman) { m_Women = women; }
void Send(string message, Person *person)
{
if(person == m_Man)
m_Women->Listen(message);
else
m_Man->Listen(message);
}
};
int main()
{
Mediator *mediator = new Son();
Person *man= new Man();
Person *women= new Women();
mediator->SetMan(man);
mediator->SetWomen(women);
man->SetMediator(mediator);
women->SetMediator(mediator);
man->Speak"I am sorry\n");
women->Speak("I forgive you unless you give me a kiss\n");
return 0;
}