~~~~我的生活。我的点点滴滴!

cocos2d-x中也有工厂模式。何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类。而这些被创建的对象叫做产品,所以这样的模式才叫做工厂模式,是不是非常形象。我们从纯c++的角度来看一下工厂模式。工厂模式又分为简单工厂模式、工厂方法模式、抽象工厂模式。

下面不给出简单的demo,网上有非常多,等以后在c++设计模式中在统一补充



1.简单工厂模式:当在程序中创建对象的时候少不了new,有时候new会非常多。又分布在程序的不同地方。管理起来非常不方便,这个时候须要一个工厂类,专门负责对象的创建和释放。将对象的这样的操作统一在一起,同一时候工厂类向外部提供了创建对象的接口。而对对象的使用则和这个工厂类毫无关系。

2.工厂方法模式:是为了解决简单工厂模式的弊端存在的。简单工厂模式的扩展性不好,比方我们有了第三个产品ProductC,我们须要工厂为我们产生这个对象。怎么办。须要改动工厂类中的创建对象的函数。也就是switch结构,还有就是枚举处也要进行改动。而这样的改动会带来不少的弊端,所以我们就有了工厂方法模式。这个模式将Factory设计为抽象类,当中包括子类必须实现的方法。而对产品的详细创建则放到Factory的子类中去完毕。这个时候假设有一个产品C。我们就创建一个工厂类FactoryC,专门用来产生产品C,就不须要改动其它地方的代码了。

3.抽象工厂模式:如今我们的产品类都是继承自Product的,假设有一个产品不是Product的子类怎么办呢?这个时候就用到了抽象工厂模式,这个模式是工厂方法模式的叠加,其它的东西类似于工厂方法模式。

上面介绍完了c++中的三种工厂模式。看看怎么应用于cocos2dx中或者cocos2dx中有没实用到(不一定非要是project模式这样的架构,思想也是能够的)。

引用某些大牛的浓缩的精华思想"工厂方法是程序设计中一个经典的设计模式。指的是基类中仅仅定义创建对象的接口,将实际的实现推迟到子类中” 我们略微YY一下,“泛指一切生成并返回一个对象的函数”。假设要这样说的话那cocos2dx中实在是太多了。比方创建场景静态函数scene(),而且cocos2dx普遍都是利用这种静态函数来创建。假设我们想在我们的游戏中使用上这种思想,我们假设有例如以下一个场景情况:我们要创建非常多的子弹,假设使用Sprite的create方法每次都会分配内存,子弹销毁的时候释放内存。这种创建方法效率不高,假设我们使用工厂方法来完毕这件事情。自己的工厂方法立面维护一个容器,容器里存放被销毁的子弹,须要新的子弹的时候,从容器中拿出来。依据子弹的类型,更换纹理。重置位置,重置飞行速度和方向,然后发射出去。

假设容器中没有被销毁的子弹。就初始化一个。这种话就不用每次new、delete了,内存中的子弹数量是一定的,能够提高程序的效率。

浅谈cocos2dx(18) 中工厂模式的更多相关文章

  1. 浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  2. 浅谈php设计模式(1)---工厂模式

    一.接口继承直接调用 先看看这样一段代码: <?php interface db{ function conn(); } class dbmysql implements db { public ...

  3. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  4. 浅谈 Swift 2 中的 Objective-C 指针

    浅谈 Swift 2 中的 Objective-C 指针 2015-09-07  499 文章目录 1. 在 Swift 中读 C 指针 2. 在 Swift 中创建 C 指针 3. 总结 作者:Ja ...

  5. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  6. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  7. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  8. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  9. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

随机推荐

  1. Unity3D for Mac 破解

    每次版本更新又忘记怎么搞了.干脆记下来! 1安装Unity 2安装成功后打开Applecation>Unity>Unity(右击显示包内容)>contents>MacOS 3用 ...

  2. Windows 之 可以Ping通服务器但无法使用服务器连接的共享打印机

    故障现象:一个公司内部局域网中,一台电脑可以Ping通服务器,但无法使用服务器连接的共享打印机. 故障分析与排除:根据故障现象分析,由于客户端可以Ping通服务器,说明网络连接正常,故障可能是由客户端 ...

  3. 求两个有序数组的中位数或者第k小元素

    问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...

  4. IntelliJ IDEA安装主题详细步骤

    主题下载网址:http://color-themes.com/?view=index 本文测试的软件版本:IntelliJ IDEA 2016.1.2 一.下载主题包   1 1. 打开上述网址(ht ...

  5. MySql绿色版安装步骤和方法,以及配置文件修改,Mysql服务器启动

    MySql绿色版Windows安装步骤和方法,以及配置文件修改,Mysql服务器启动 支持“标准”Markdown / CommonMark和Github风格的语法,也可变身为代码编辑器: 支持实时预 ...

  6. Java中String、StringBuffer和StringBuilder的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6581009.html  在编程中,对于字符串拼接,我们可以用String类重载的+或concat(str).S ...

  7. java LimitedThreadPool

    此线程池一直增长,直到上限,增长后不收缩(因为池子里面的线程是永生的).这个keepAliveTime参数设置的为Long.MAX_VALUE,所以池子里面的线程几乎不会因为idle而被termina ...

  8. exception java.lang.OutOfMemoryError: Java heap space

      1.情景展示 java内存溢出异常,将程序代码问题排除在外,如何增大JVM的使用内存? 2.解决方案  在eclipse中的解决办法:增大你要运行的测试类的内存分配. 点击运行或debug按钮旁的 ...

  9. Windows下 VS2015编译boost1.62

    VS2015编译boost1.62 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有 ...

  10. iscsi共享分区测试

    要求:在服务器端Server0上创建一个分区/dev/sdb1(无需格式化),配置成iscsi target设备,块设备名称为sun1,iqn名称为iqn.2018-01.com.ultrapower ...