现在的位置: 首页 > 综合 > 正文

AbstractFactory

2018年03月30日 ⁄ 综合 ⁄ 共 1370字 ⁄ 字号 评论关闭

抽象工厂设计模式

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

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

抱歉!评论已关闭.