抽象工厂设计模式
设计一个格斗游戏,有初等级别和高难度级别。初等级别的地方士兵、怪兽和超级怪兽攻击力低下,高难度则相反,攻击力很强。要实现这个游戏,要完成两个目标:一个是敌人(有士兵、怪兽和超级怪兽),另一个是成批量的创建敌人(有士兵、怪兽和超级怪兽),那么抽象工厂设计模式正好满足需求。
关于游戏中的 UML 图
设计游戏类
class Soldier {}; class SillySoldier : public Soldier { }; class BadSoldier : public Soldier { }; class Monster {}; class SillyMonster : public Monster { }; class BadMonster : public Monster { }; class SuperMonster {}; class SillySuperMonster : public SuperMonster { }; class BadSuperMonster : public SuperMonster { }; class AbstractEnemyFactory { public: virtual Soldier* MakeSoldier() = 0; virtual Monster* MakeMonster() = 0; virtual SuperMonster* MakeSuperMonster() = 0; }; class EasyLevelEnemyFactory : public AbstractEnemyFactory { public: Soldier* MakeSoldier() { return new SillySoldier; } Monster* MakeMonster() { return new SillyMonster; } SuperMonster* MakeSuperMonster() { return new SuperMonster; } }; class DieHardLevelEnemyFactory : public AbstractEnemyFactory { public: Soldier* MakeSoldier() { return new BadSoldier; } Monster* MakeMonster() { return new BadMonster; } SuperMonster* MakeSuperMonster() { return new BadSuperMonster; } }; int main() { AbstractEnemyFactory *pEasyLevelEnemyFactory = new EasyLevelEnemyFactory; pEasyLevelEnemyFactory->MakeMonster(); AbstractEnemyFactory *pDieHardLevelEnemyFactory = new DieHardLevelEnemyFactory; pDieHardLevelEnemyFactory->MakeSoldier(); return 0; }
“开放-封闭”原则
“开放-封闭”原则要求系统对扩展开放,对修改封闭。通过扩展达到增加其功能的目的。比如要增加新的一个敌人 BossMonster 类 ,只需在生产工厂AbstractEnemyFactory增加新的方法MakeBossMonster 即可,只要增加新的类,无需改动原来已有敌人的代码。