浅谈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注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
随机推荐
- Apache和Nginx对比
面试过程中被问到Apache和Nginx服务器的对比,因为之前没有关注过这个问题,所以也没能回答上来. 今天在网上搜索资料,发现中文资料极少,还是英文资料多一下. 原文链接:https://www.w ...
- 微信小程序 - 分包加载(独立分包)
独立分包是小程序中一种特殊类型的分包,可以独立于主包和其他分包运行.从独立分包中页面进入小程序时,不需要下载主包.当用户进入普通分包或主包内页面时,主包才会被下载 将某些具有一定功能独立性的页面配置到 ...
- 第二周 Word版面设计
第二周 Word版面设计 教学时间 2013-3-5 教学课时 2 教案序号 1 教学目标 1.能正确设置纸张.版心.视图.分栏.页眉页脚2.掌握节的概念并能正确使用 教学过程: 新课 要使一篇文档美 ...
- JS base64加解密解决传输的url各种编码问题
网上拷贝的,废话少说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- IntelliJ IDEA安装主题详细步骤
主题下载网址:http://color-themes.com/?view=index 本文测试的软件版本:IntelliJ IDEA 2016.1.2 一.下载主题包 1 1. 打开上述网址(ht ...
- tomcat6url请求400错误(%2F与%5C)
近期几天,开发接口时.tomcat报了400错误,查了下原因. 错误原因:url中參数部分包括/,默认tomcat是不支持url參数包括: /(%2F),\(%5C). 解析方法:能够通过加入配置Do ...
- 〖Linux〗Ubuntu设定Proxy及忽略Proxy
1. 设定代理:. ~/.proxyenv #!/bin/sh # for terminal export proxyserveraddr=123.123.123.123 export proxyse ...
- Arduino通过I2C(PCF8574T)驱动1602LCD
Arduino中使用I2C通信可直接调用Wire.h库, 这个库允许Arduino链接其他I2C设备, 链接线有两条, 分别是SDA(数据行)和SCI(时钟线). 各型号Arduino的I2C对应引脚 ...
- highstock禁用UTC
xAxis: { labels: { format: '{value:%Y-%m-%d}', /* * 也可以用 formatter 格式化函数,时间格式化说明如下: * %Y 年 * %m 月 * ...
- 【note】EtherCAT Configurator 使用之主菜单介绍
EtherCAT配置器是一个工具,用于配置EtherCAT总线. 工具管理一个或多个EtherCAT主设备和连接到该主站的EtherCAT从站.配置的设备能够脱机或能够通过扫描EtherCAT现场总线 ...