码迷,mamicode.com
首页 > 其他好文 > 详细

粗略分析cocos2d-x的工厂模式

时间:2015-05-05 01:15:14      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

  吐槽:本身学习cocos2d-x的各种内置类的时候,是不需要考虑到所谓工厂模式的。我在网上搜索关于工厂模式的解释,也是很难懂。这不得不说是我的境界过低,我知道这是一个成功的模式,只恨自己不能全部理解。那么是什么迫使我自己去分析这个模式呢——在自定义一个类(比如一个Sprite的子类)的时候,首先就要面对如何构造这个对象的问题。那么接下来我就仅仅分析这个问题。

  显然,这时我定义了一个可以被渲染的对象,所以它必须有两个特性:1.要加入到内存管理池中;2.不仅要初始化自己的属性,还可以初始化自己的节点。也就是说,autorelease和初始化是定义这样一个类的首要工作。引擎通过“工厂函数”完成这样的工作,其中一个通用的接口就是create。

  create是一个静态的虚函数,引擎让我们在这里new一个对象,把它autorelease,然后初始化对象的资源,最后把它返回。这就是一个工厂模式。

  cocos2d-x为我们提供了一个方便的宏定义:CREATE_FUNC 。CREATE_FUNC 可以为我们主动生成一个create静态成员函数。其中调用了一个成员函数init,我们要考虑的就是怎么写这个init函数。也就是说,不必考虑第一份内存管理的工作,引擎已经帮我们做了。这里只是梳理一下引擎的工厂模式,并不想说明CREATE_FUNC的使用方法。

  说实话,我还不清楚在代码上这和构造函数有什么不同(也许初始化分成了两个函数?)。但很显然,从抽象层面看,create考虑的更加周到。我们要做的,只是对一个产品(比如一个精灵类的子类)设定出厂值(写init函数),而这个产品出货后(create直接生成产品)我们就不必再操心它了,它已经交给“用户“使用了,虽然这个用户可能还是我们自己。这样看,确实犹如工厂一般。

  当然了,这肯定不是真正的工厂模式。我在网上查阅了一些资料,工厂模式确实是用来产生对象的,但是却可以产生非本类的对象,也就是说能这个工厂类可以产出很多种产品。因此,cocos2d-x的工厂函数应不仅限于create。

  总之,以我目前的理解能力,我觉得引擎的一个工厂函数——create——为我们做的,就是封装了初始化功能,让我们在定义一个场景、精灵、层这些类的子类的时候,可以方便的为其设定一个出厂值。然后别的文件就可以通过craete接口直接获得一份安全可靠的产品了。

  

粗略分析cocos2d-x的工厂模式

标签:

原文地址:http://www.cnblogs.com/demon90s/p/4478034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!