浅谈cocos2dx(18) 中工厂模式
~~~~我的生活。我的点点滴滴!
!
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) 中工厂模式的更多相关文章
- 浅谈Python设计模式 - 抽象工厂模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...
- 浅谈php设计模式(1)---工厂模式
一.接口继承直接调用 先看看这样一段代码: <?php interface db{ function conn(); } class dbmysql implements db { public ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 浅谈 Swift 2 中的 Objective-C 指针
浅谈 Swift 2 中的 Objective-C 指针 2015-09-07 499 文章目录 1. 在 Swift 中读 C 指针 2. 在 Swift 中创建 C 指针 3. 总结 作者:Ja ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- 转载 浅谈C/C++中的static和extern关键字
浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
随机推荐
- 【转】Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
转自:http://blog.csdn.net/jiangwei0910410003/article/details/18967441 一. 查看所有进程占用的端口 在开始-运行-cmd,输入:ne ...
- Spark的运行模式(1)--Local和Standalone
Spark一共有5种运行模式:Local,Standalone,Yarn-Cluster,Yarn-Client和Mesos. 1. Local Local模式即单机模式,如果在命令语句中不加任何配置 ...
- 整合Tomcat和Nginx实现动静态负载均衡
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6386135.html Nginx与tomcat整合可以实现服务器的负载均衡. 在用户的请求发往服务器进行处理时 ...
- system.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式-解决方法
LINQ to Entities的lambda表达式中如果需要转换时间及各种时间格式请使用System.Data.Entity的类DbFunctions的各种方法 例如: IsOverdue = db ...
- 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...
- javascript库之Mustache库使用说明
一.简单示例 代码: function show(t) { $("#content").html(t); } var view = { title: 'YZF', cacl: fu ...
- V-rep中的加速度计与陀螺仪
加速度计(Accelerometer) VREP的模型浏览器components→sensors中可以找到加速度计的模型,用于测量物体沿着世界坐标系三个坐标轴的加速度值. VREP中没有直接测量加速度 ...
- JUC-线程八锁
1,一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待, 换句话说,某一个时刻内,只能有唯一一个线程去访 ...
- 播布客视频PIT专用播放器MBOO2015
播布客视频,还是挺不错... 很多视频都是pit后缀的,需要用MBOO2015才可以打开... 00.MB2015软件 01.视频样例 02.download 链接: https://pan.baid ...
- Uploadify in ASP.Net
和分页类似,文件上传是web开发标配的技能之一.下面介绍Uploadify的配置和使用. 一.配置 首先到Uploadify官网下载,然后在项目中添加相应引用.前台代码如下: 1.jquery.js2 ...