class Soldier { public: virtual ~Soldier() {} }; class Monster { public: virtual ~Monster() {} }; class SuperMonster { public: virtual ~SuperMonster() {} }; class SillySoldier : public Soldier {}; class SillyMonster : public Monster {}; class SillySuperMonster : public SuperMonster {}; class BadSoldier : public Soldier {}; class BadMonster : public Monster {}; class BadSuperMonster : public SuperMonster {}; void abstractfactory_test() { using namespace Loki; typedef AbstractFactory AbstractEnemyFactory; typedef ConcreteFactory EasyLevelEnemyFactory; typedef ConcreteFactory HardLevelEnemyFactory; std::auto_ptr easyFactory(new EasyLevelEnemyFactory); std::auto_ptr hardFactory(new HardLevelEnemyFactory); //1 Monster *s; s = easyFactory->Create (); delete s; //2 AbstractFactoryUnit & soldier_V = *easyFactory; AbstractFactoryUnit & monster_V = *easyFactory; AbstractFactoryUnit & superMonster_V = *easyFactory; }
?
下图 为 两个类 的继承关系图