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


      吐槽:本身学习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——为我们做的,就是封装了初始化功能,让我们在定义一个场景、精灵、层这些类的子类的时候,可以方便的为其设定一个出厂值。然后别的文件就可以通过create接口直接获得一份安全可靠的产品了。

      

  • 相关阅读:
    区块链技术术语表
    以太坊客户端Geth命令用法-参数详解
    智能合约开发环境搭建及Hello World合约
    以太坊是什么
    比特币区块结构Merkle树及简单支付验证分析
    非对称加密技术- RSA算法数学原理分析
    验证APNS证书的有效性
    十八般武艺之 Runloop
    iOS 所有设备一览 && CoreFoundation源码
    [User Defaults] Failed to read values in CFPrefsPlistSource (iOS 10)
  • 原文地址:https://www.cnblogs.com/demon90s/p/4478034.html
Copyright © 2020-2023  润新知