12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include <iostream>
- #include <string>
- using namespace std;
- class Person;
- class Mediator {
- public:
- virtual void Send(const string& msg, Person* person) = 0;
- virtual ~Mediator() { }
- void BuildRelation(Person *a, Person *b) {
- m_a = a;
- m_b = b;
- }
- protected:
- Person *m_a;
- Person *m_b;
- };
- class ConcreteMediator :public Mediator {
- public:
- void Send(const string& msg, Person* person) {
- if (person == m_a) {
- cout << msg << "--Mediator--PersonB" << endl;
- }
- else if (person == m_b) {
- cout << msg << "--Mediator--PersonA" << endl;
- }
- }
- };
- class Person {
- public:
- Person(Mediator*md):_md(md) { }
- virtual void SendMessage(const string& msg) = 0;
- virtual ~Person() { }
- protected:
- Mediator* _md;
- };
- class ConcretePersonA :public Person {
- public:
- ConcretePersonA(Mediator* md):Person(md) { }
- void SendMessage(const string& msg) {
- _md->Send(msg, this);
- }
- };
- class ConcretePersonB :public Person {
- public:
- ConcretePersonB(Mediator* md):Person(md) { }
- void SendMessage(const string& msg) {
- _md->Send(msg, this);
- }
- };
- int main() {
- Mediator *mediator = new ConcreteMediator();
- Person *personA = new ConcretePersonA(mediator);
- Person *personB = new ConcretePersonB(mediator);
- mediator->BuildRelation(personA, personB);
- personA->SendMessage("PersonA");
- personB->SendMessage("PersonB");
- delete personA;
- delete personB;
- delete mediator;
- return 0;
- }
|