抽象工厂模式(二)
#include <iostream> using namespace std; class Man { public: virtual void introduce() = 0; }; class WhiteMan : public Man { public: virtual void introduce() { cout << "我是白种男人!" << endl; } }; class YellowMan : public Man { public: virtual void introduce() { cout << "我是黄种男人!" << endl; } }; class BlackMan : public Man { public: virtual void introduce() { cout << "我是黑种男人!" << endl; } }; class Woman { public: virtual void introduce() = 0; }; class WhiteWoman : public Woman { public: virtual void introduce() { cout << "我是白种女人!" << endl; } }; class YellowWoman : public Woman { public: virtual void introduce() { cout << "我是黄种女人!" << endl; } }; class BlackWoman : public Woman { public: virtual void introduce() { cout << "我是黑种女人!" << endl; } }; class AbstractFactory { public: virtual Man* ProduceMan() = 0; virtual Woman* ProduceWoman() = 0; }; class YellowFactory : public AbstractFactory { public: virtual Man* ProduceMan() { return new YellowMan; } virtual Woman* ProduceWoman() { return new YellowWoman; } }; class WhiteFactory : public AbstractFactory { public: virtual Man* ProduceMan() { return new WhiteMan; } virtual Woman* ProduceWoman() { return new WhiteWoman; } }; class BlackFactory : public AbstractFactory { public: virtual Man* ProduceMan() { return new BlackMan; } virtual Woman* ProduceWoman() { return new BlackWoman; } }; int main(void) { AbstractFactory * factory = NULL; Man *man = NULL; Woman *woman = NULL; // 黄人 factory = new YellowFactory; man = factory->ProduceMan(); woman = factory->ProduceWoman(); man->introduce(); woman->introduce(); delete woman; delete man; delete factory; cout << "-----------------------" << endl; // 白人 factory = new WhiteFactory; man = factory->ProduceMan(); woman = factory->ProduceWoman(); man->introduce(); woman->introduce(); delete woman; delete man; delete factory; cout << "-----------------------" << endl; // 黑人 factory = new BlackFactory; man = factory->ProduceMan(); woman = factory->ProduceWoman(); man->introduce(); woman->introduce(); delete woman; delete man; delete factory; }