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
- abstractfactory
- AbstractFactory
- AbstractFactory
- AbstractFactory
- AbstractFactory
- AbstractFactory
- AbstractFactory
- AbstractFactory
- AbstractFactory模式
- AbstractFactory模式
- AbstractFactory模式
- AbstractFactory Pattern
- AbstractFactory模式
- AbstractFactory模式
- AbstractFactory模式
- AbstractFactory 模式
- Factory && AbstractFactory
- My AbstractFactory in C#
- 深入理解Java虚拟机笔记---类索引,父类索引,接口索引集合
- Hadoop学习<二>--HDFS文件系统操作方式
- 【后缀数组】【poj 3693】Maximum repetition substring
- oracle数据库监听例程blocked的处理
- 面试常备题---链表总结篇
- AbstractFactory
- 转载自http://blog.csdn.net/fei20072050104/article/details/21785565
- lesson20:
- 学了一段时间的C#,只是想记录一下~用字典实现字符串转换为汉字
- OC内存管理(ARC)
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- 第十六周OJ项目——指针引出奇数因子
- java.sql.SQLSyntaxErrorException: ORA-00907: 缺失右括号
- csapp2e homework 2.77