浅谈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注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
随机推荐
- NameNode的ZKFC机制
转自: http://hackershell.cn/?p=821 NameNode的HA可以个人认为简单分为共享editLog机制和ZKFC对NameNode状态的控制 在此之前,我先提几个问题: 一 ...
- MAC快捷方式记录
刚刚转到MAC,很多功能发现不能用,总结一下: 刷新页面:command+r 命令行,到行首:control+a 命令行,到行尾:control+e vim,到行尾:shift+$ vim,到行首:s ...
- ADHOC Report 配置
ADHOC Report ADHOC Report - 临时的report,随时可以去系统中按照你选择的条件打出你想看的report Add ADHOC Report --AddReport use ...
- SSM实战——秒杀系统之高并发优化
一:高并发点 高并发出现在秒杀详情页,主要可能出现高并发问题的地方有:秒杀地址暴露.执行秒杀操作. 二:静态资源访问(页面)优化——CDN CDN,内容分发网络.我们把静态的资源(html/css/j ...
- Struts2学习笔记一:工作流程与核心文件
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6807539.html 1:客户端发出请求到web服务器 2:请求经过一系列filter,最终到达Struts ...
- VIM设置代码折叠
今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧. 1. 折叠方式 可用选项来设定折叠方式: 可在V ...
- 一张图弄明确开源协议-GPL、BSD、MIT、Mozilla、Apache和LGPL 之间的差别
导读 在开源软件中常常看到各种协议说明.GPL.BSD.MIT.Mozilla.Apache和LGPL. - 这些协议之间的有什么差别 - 怎样选择合适的开源协议 请看下文,特作记录一篇,以供兴许查看 ...
- Linux下几款C++程序中的内存泄露检查工具
https://blog.csdn.net/gatieme/article/details/51959654
- oracle 快速复制表结构、表数据
1.情景展示 根据现有的表,建一个新的表,要求:新表的结构与原有表的表结构一模一样,如何快速实现? 根据现有的表,建一个新的表,要求:新表的结构.数据与原表一模一样,如何实现快速复制旧表? 2.解 ...
- JAVA内存模型及垃圾回收自我总结
本文为原创,根据<深入理解java虚拟机>和自己的一些理解进行整理,单纯和看其他人的博客感觉不如自己一点点的画和记录来的印象深刻. JAVA内存模型: 上图中:局部变量表所需的内存在编译期 ...