使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。

原型模式的核心思想是:一个对象可以生成与自身相似的其他对象。假设我们有一个怪物的类,我们可以这样构造:

#include <iostream>class Enemy
{
public:virtual ~Enemy() {}virtual std::shared_ptr<Enemy> Clone() = 0;
};class BirdEnemy :public Enemy
{
public:BirdEnemy(){}BirdEnemy(float hp, float speed) :hp(hp), speed(speed) {}virtual std::shared_ptr <Enemy> Clone(){return std::make_shared< BirdEnemy>(100, 20);}private:float hp = 0;float speed = 0;
};

然后我们定义一个生成器

class Spawner
{
public:virtual ~Spawner() {}virtual std::shared_ptr<Enemy> SpawnEnemy() = 0;
};template<class T>
class SpawnFor : public Spawner
{
public:virtual std::shared_ptr<Enemy> SpawnEnemy() { return std::make_shared<T>(); }
};

使用

auto bird_spawner = std::make_shared<SpawnFor<BirdEnemy>>();

如果我们想要创建各种各样的BirdEnemy,则只需要创建各种各样的原型。我们只需要对上面的代码进行简单的更改:

class Enemy
{
public:virtual ~Enemy() {}virtual std::shared_ptr<Enemy> Clone() = 0;
};class BirdEnemy :public Enemy
{
public:BirdEnemy(){}BirdEnemy(const BirdEnemy& be) :hp(be.hp), speed(be.speed) {}BirdEnemy(BirdEnemy&& be) :hp(be.hp), speed(be.speed) {}BirdEnemy(float hp, float speed) :hp(hp), speed(speed) {}virtual std::shared_ptr <Enemy> Clone(){return std::make_shared< BirdEnemy>(*this);}private:float hp = 0;float speed = 0;
};class Spawner
{
public:virtual ~Spawner() {}virtual std::shared_ptr<Enemy> SpawnEnemy() = 0;
};template<class T>
class SpawnFor : public Spawner
{
public:SpawnFor(T&& t) :t(std::move(t)) {}virtual std::shared_ptr<Enemy> SpawnEnemy() { return t.Clone(); }private:T t;
};

现在策划告诉我们需要一个血量为100,速度为20的鸟类怪物,只需要:

BirdEnemy brid_enemy_template(100, 20);
auto bird_spawner = std::make_shared<SpawnFor<BirdEnemy>>(std::move(brid_enemy_template));

甚至下一步,可以直接将这些数值和种类都配置在表格里,代码进行循环读取,并创建各种各样的生成器。


以上都是基于C++来进行的设计,但是对于很多将Class作为头等公民的语言来说,Class是可以当做参数进行传递的,对于上面的实现,将会更加的简洁和优雅。

游戏设计模式-原型模式相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  6. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  7. 游戏设计模式 - 命令模式在Unity中的应用(C#)

    游戏设计模式 - 命令模式在Unity中的应用(C#) 实测:这是一篇简单易懂的文章-> https://zhuanlan.zhihu.com/p/46937284

  8. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  9. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

最新文章

  1. 一文概述2017年深度学习NLP重大进展与趋势
  2. impala和python_Impala和Hive之间有什么关系?
  3. 入行Python需要看的4本书推荐
  4. Python读取文本,输出指定中文(字符串)
  5. 台式计算机配置清单及价格,电脑主机配置清单及价格(台式组装机电脑配置清单)...
  6. 用Python批量替换多个Word文件中的文字
  7. [QUANTAXIS量化分析]三因素模型
  8. 无线路由器使用有线的桥接方法。
  9. 数仓02-从0到1设计和搭建
  10. 文本超出显示省略号的方法
  11. C语言连续定义多个指针变量
  12. 距离矢量(D-V)和链路状态(LS)的区别(转)
  13. 【入门】求长方形的周长和面积
  14. project2010 实验一使用记录
  15. 如何批量添加文件名前缀?
  16. PHP三种数组合并方式
  17. 利用现有资源建立自己的经营模式
  18. java resultmap_mybatis: resultMap 结果集映射和多表查询
  19. 微信自定义链接分享标题描述跳转任意链接url在线生成方法
  20. 写给即将步入大一的计算机新生的一些经验之谈

热门文章

  1. 计算机信息系统集成资质涉密信息系统集成资质
  2. 联想电脑安装Ubuntu后无法进入bios
  3. Mysql+Echarts+Python+Flask实现前后端交互及数据可视化
  4. windows用python读取文件open()函数
  5. 完美解决“未能装载Office文档控件。请使用Internet Explorer(6.0+)浏览器并检查浏览器的安全设置。”的方案
  6. 4路 HX5+Emulex 8Gb 实现 BOFM 实施 -chenjhh@dc
  7. Django基于admin的stark组件创建(一)
  8. 俄罗斯军事帝国的衰落
  9. 电脑的大脑——CPU
  10. html自学网页制作,HTML入门学习教程:简单网页制作