#include <iostream>
#include <string>
using namespace std;
class country;
class united_nation //中介类
{
public:
virtual ~united_nation(){}
virtual void declare(const string &message, country *colleague) =0;
};
class country
{
public:
country(united_nation *nation):_nation(nation){}
protected:
united_nation *_nation;
};
class USA : public country
{
public:
USA(united_nation *nation):country(nation){}
void declare(const string &message)
{
_nation->declare(message, this);
}
void get_message(const string &message)
{
cout << "USA get message : "<<message <<endl;
}
};
class Iraq : public country
{
public:
Iraq(united_nation *nation):country(nation){}
void declare(const string &message)
{
_nation->declare(message, this);
}
void get_message(const string &message)
{
cout <<"Iraq get message : "<<message<<endl;
}
};
class united_nation_security_council : public united_nation
{
public:
united_nation_security_council():_usa(NULL),_iraq(NULL){}
void setUSA(USA *usa)
{
_usa = usa;
}
void setIraq(Iraq *iraq)
{
_iraq = iraq;
}
void declare(const string &message, country *colleague)
{
if (_usa == colleague)
{
_iraq->get_message(message);
}
else if (_iraq == colleague)
{
_usa->get_message(message);
}
else
{
}
}
private:
USA *_usa;
Iraq *_iraq;
};
int main()
{
united_nation_security_council *UNSC = new united_nation_security_council;
USA *usa = new USA(UNSC);
Iraq *iraq = new Iraq(UNSC);
UNSC->setUSA(usa);
UNSC->setIraq(iraq);
usa->declare("We are Americas!");
iraq->declare("We are Iraqs!");
delete UNSC;delete usa;delete iraq;
return 0;
}