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

  

时间: 2024-12-15 13:16:51

粗略分析cocos2d-x的工厂模式的相关文章

使用工厂模式与泛型对三层架构的每一层进行解耦

我们都知道在web开发时经常使用三层架构(web.service.dao),每一层有着自己的实现类,而通过对实现类进行抽取方法形成接口,每一层通过接口进行上下层之间的耦合.例如在业务service层和数据访问dao层之间,当dao层写好了对数据库的增删改查方法时,抽取成dao接口,而在service如果要调用dao层的方法就只要使用dao接口即可,但是关键是在service层使用dao接口的时候,如何获取dao接口的实现对象是个问题. 案例:在数据访问dao层,编写好了一个对数据库中表user的

网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct

三个工厂模式的分析

学习设计模式很长时间了,一直想把这些模式进行分类和总结,却不知道从哪里开始.发现工厂模式是一个系列,就从三个工厂模式说起吧. 首先来说简单工厂模式,以设计计算器为例分析这个模式,简单工厂模式抽象出了一个业务逻辑的父类,父类定义了定义了属性和方法,子运算类只需要重写运算方法即可,客户端负责输入和输出数据,运算工厂类决定实例化对象. 简单工厂类结构图: 简单工厂实现了业务逻辑和界面逻辑的分离,但是如果我们需要增加或减少计算器功能,需要修改运算工厂类,这不符合开放封闭原则,这个模式要慎重使用. 前边的

结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个设计模式,但很多地方都用到了工厂模式,(如解析xml中,jdbc连接数据库等)利用好工厂模式对程序的设计很有用处.工厂模式在一些设计模式的书中分为简单工厂模式,工厂方法模式和抽象工厂模式三类.也有把工厂方法模式划分到抽象工厂模式的,认为工厂方法是抽象工厂模式的特例的一种,就是只有一个要实现的产品接口

7中创建对象的方式(工厂模式、构造函数模式、原型模式、动态原型模式等分析)

1.工厂模式 // 定义工厂函数 function createPerson(name, age, hobby) { // 创建一个临时object对象 var obj = new Object(); // 将工厂函数的参数赋值给临时对象 obj.name = name; obj.age = age; obj.hobby = hobby; obj.sayName = function() { console.log("我的名字叫:"+this.name); } // 返回这个包装好的临

完整案例分析再加知识整合——艾特简单工厂模式,超详细的

简单工厂模式 一.模式动机与定义 模式动机 只需要知道水果的名字即可得到相应的水果 模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法模式,它属于类创建型模式. 在简单工厂模式中,可以根据参数的不同返回不同类的实例. 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式结构与分析 模式结构 简单工厂模式包含如下角色: Factory:工厂角色 Product:抽象产品角色 ConcreteProduct:具体产品角

完整案例分析再加知识整合——艾特抽象工厂模式,超详细的

抽象工厂模式 模式动机与定义 模式动机 产品等级结构:产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类. 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,例如海尔电器工厂生产的海尔电视机.海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中. 模式定义 抽象工厂模式(Abs

透彻理解工厂模式---分析MediaPlayerFactory

1      什么是工厂模式? 以下摘自维基百科 工厂方法模式(英语:Factorymethod pattern)是一种实现了"工厂"概念的面向对象设计模式.就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题.工厂方法模式的实质是"定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行." 创建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中.创建对象可能会导致大量的重复代码,可能会需