通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
来源:互联网 发布:近3年出境游数据统计 编辑:程序博客网 时间:2024/05/23 00:08
想必很多人都玩过魔兽争霸3。里面有一个非常厉害的英雄叫做剑圣。这个英雄攻击力算是最高的,而且有个听起来很叼的魔法,“剑刃风暴”,这个魔法其实效果一般,不大实用。
剑圣有一个分身的功能。这个分身各个方面和剑圣都一模一样,但是没有攻击力,也没有魔法。
1 这个分身是游戏过程中动态生成的。剑圣使用了这个功能就动态生成分身。
2 这个分身几乎就是剑圣的拷贝。如果重新new一个剑圣不符合游戏规则。玩过War3的人都知道一个种族只能有一个剑圣吧,如果可以有3个剑圣,让其它族怎么玩。
3 重新创建一个剑圣很麻烦,要初始化各种参数,如等级啊,攻击力啊,等等各个参数,而且这些参数要和原型一致。直接通过原型模式实现则简单。
剑圣有一个分身的功能。这个分身各个方面和剑圣都一模一样,但是没有攻击力,也没有魔法。
如何实现这个分身的功能呢?使用原型模式。原型模式就是这么一个道理,通过现有的东西,用Clone再复制拷贝出一个或者多个。
1 这个分身是游戏过程中动态生成的。剑圣使用了这个功能就动态生成分身。
2 这个分身几乎就是剑圣的拷贝。如果重新new一个剑圣不符合游戏规则。玩过War3的人都知道一个种族只能有一个剑圣吧,如果可以有3个剑圣,让其它族怎么玩。
3 重新创建一个剑圣很麻烦,要初始化各种参数,如等级啊,攻击力啊,等等各个参数,而且这些参数要和原型一致。直接通过原型模式实现则简单。
4 便于扩展。如果分身有30%原剑圣的攻击力,那么我们直接修改Clone方法即可。对外的接口不用变更。
下面是实现代码:
//相当于类图中的Prototype,也就是原型class Hero{public:Hero(int damage,string magic)//构造函数{SetDamage(damage);SetMagic(magic);}Hero(const Hero & h) //拷贝构造函数{SetDamage(h.m_damage);SetMagic(h.m_magic);}void SetDamage(int damage){m_damage = damage;}void SetMagic(string magic){m_magic = magic;}void Attach() //攻击{printf("Hero Attach damage: %d\r\nHero magic: %s\r\n",m_damage,m_magic.c_str());}virtual ~Hero(){}virtual Hero* Clone() = 0; protected:int m_damage;//攻击力string m_magic;//魔法};//相当于类图中的ConcretePrototypeclass BM : public Hero //BM 剑圣{public:BM(int damage,string magic) : Hero(damage,magic){}~BM(){}BM(const BM& bm) : Hero(bm) //拷贝构造函数{}Hero* Clone(){BM* bm = new BM(*this);bm->SetDamage(0);bm->SetMagic("No Magic");return bm;}};//相当于类图中的Client//场景测试void TestProtoType(){Hero* bm = new BM(98,"剑刃风暴");bm->Attach();Hero* bm1 = bm->Clone();bm1->Attach();delete bm;delete bm1;}
阅读全文
0 0
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--组合模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--适配器模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--工厂方法模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--抽象工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--建造者模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--桥接模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--外观模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--单例模式以及多线程下说明(C++实现)
- 设计模式之原型模式 c++实现以及详解
- 使用Object-C实现23种设计模式之原型模式
- 设计模式之原型模式(C++)
- C#--设计模式之原型模式
- 用例子说明MVC 设计模式(以Objective-C 实现)
- 用例子说明MVC 设计模式(以Objective-C 实现)
- 用例子说明MVC 设计模式(以Objective-C 实现)
- 设计模式之原型模式,C++实现
- iOS 11适配
- 消息队列应用场景
- leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法
- prop和attr
- Android 获取手机整体流量使用情况以及某个应用的流量的统计
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- hql 语法与详细解释
- Excel 常用函数
- ZigBee基础实验(五)--UART(ONLY串口发送)
- android app 更新下载安装 适配android 7.0
- SpringMVC框架的总结
- javascript字符串转数组
- jquery学习笔记1
- C#回顾学习笔记二十五:程序员必备技能,调试