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

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. 牛客网-《剑指offer》-重建二叉树

    题目:http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6 C++ /** * Definition for binary ...

  2. nginx获得response自定义的header

    Response header send by upstream is $upstream_http_x_uuid http://wiki.nginx.org/HttpUpstreamModule#. ...

  3. mysql主从备份功能配置与測试

    在高訪问量服务环境下,单机配置mysql服务将无法满足频繁快速的数据读写操作. 一旦mysql出现故障造成数据丢失.无法恢复. 因此.在mysql服务上启用主从备份功能,支持读写分离技术.最靠可的是搭 ...

  4. Aerospike系列:3:aerospike特点分析

    1. 数据存放 数据可以放内存,也可以放SSD.   数据放内存时速度肯定会很快,但这和memcache一样,相比memcache性能并没有优势 数据放内存时可以进行持久化配置,但文档只有一个地方提了 ...

  5. Kinect2.0关节角度获取

    通过Kinect获取到关节的三维坐标点后可以根据向量点积或叉积公式计算出关节角度: $$\vec{a}\cdot \vec{b} = |\vec{a}||\vec{b}|cos\theta$$ vec ...

  6. urllib2特点--urllib2.build_opener对象接口

    # -*- coding: cp936 -*- #python 27 #xiaodeng #urllib2特点--urllib2.build_opener对象接口 import urllib2 imp ...

  7. X-Forwarded-For 会少记录一次代理服务器的IP

    X-Forwarded-For是一个Http请求头中的项目. 当一个请求经过代理时,X-Forwarded-For将被记录下来,规则如下: 假设用户U,通过代理服务器A,请求到服务器S, 那么X-Fo ...

  8. ios中图片旋转

    @interface ViewController () { UIImageView *_imageview; BOOL flag; } @end @implementation ViewContro ...

  9. ios中滚动页面

    - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { int width=frame. ...

  10. 浏览器跨域问题(jsonp)——jsonp详解

    json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. 同源策略 首先 ...