中介者模式
其他二十三种设计模式
#include<iostream>
using namespace std;
class Country;
class UnitedNations {
public:
virtual void Declare(string _message, Country* _colleague) = 0;
};
class Country {
public:
Country(UnitedNations* _mediator) {
this->mediator = _mediator;
}
protected:
UnitedNations* mediator;
};
class USA :public Country {
public:
USA(UnitedNations* _mediator) :Country(_mediator) {
}
void Declare(string _message) {
mediator->Declare(_message, this);
}
void GetMessage(string _message) {
cout << "美国获得的信息:" << _message << endl;
}
};
class Iraq :public Country {
public:
Iraq(UnitedNations* _mediator) :Country(_mediator) {
}
void Declare(string _message) {
mediator->Declare(_message, this);
}
void GetMessage(string _message) {
cout << "伊拉克获得的信息:" << _message << endl;
}
};
class UnitedNationsSecurityCouncil :public UnitedNations {
public:
USA* Colleague1(Country* _country) {
this->colleague1 = (USA*)_country;
return this->colleague1;
}
Iraq* Colleague2(Country* _country) {
this->colleague2 = (Iraq*)_country;
return this->colleague2;
}
virtual void Declare(string _message, Country* _colleague) {
if (_colleague == colleague1)
colleague2->GetMessage(_message);
else
colleague1->GetMessage(_message);
}
private:
USA* colleague1 = NULL;
Iraq* colleague2 = NULL;
};
void test1() {
UnitedNationsSecurityCouncil* UNSC = new UnitedNationsSecurityCouncil;
USA* c1 = new USA(UNSC);
Iraq* c2 = new Iraq(UNSC);
UNSC->Colleague1(c1);
UNSC->Colleague2(c2);
c1->Declare("不准研制核武器,否则发动战争!");
c2->Declare("我们没有核武器,也不怕侵略!");
delete c2;
delete c1;
delete UNSC;
}
int main() {
test1();
return 0;
}