AbstractFactory

来源:互联网 发布:编程c图形库砖块金字塔 编辑:程序博客网 时间:2024/05/21 08:36

抽象工厂设计模式

设计一个格斗游戏,有初等级别和高难度级别。初等级别的地方士兵、怪兽和超级怪兽攻击力低下,高难度则相反,攻击力很强。要实现这个游戏,要完成两个目标:一个是敌人(有士兵、怪兽和超级怪兽),另一个是成批量的创建敌人(有士兵、怪兽和超级怪兽),那么抽象工厂设计模式正好满足需求。

关于游戏中的 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 即可,只要增加新的类,无需改动原来已有敌人的代码。

0 0
原创粉丝点击