cocos2dx中的设计模式

转载 2016年06月01日 23:11:35

1.二段构建模式

大家都知道在c++中我们一般在构造函数中为对象分配内存空间然后初始化成员变量,比如我们调用了new某个东西,那么在堆上会先为对象分配内存空间,然后调用构造函数,在构造函数中完成一些初始化的工作。而二段构建模式就是将内存空间的分配和初始化分开来完成,然后调用一个静态方法来返回这个对象。就拿cocos2dx中的Sprite类来说吧,当我们调用Sprite::create()的时候内部先使用new来分配内存空间,然后调用init方法来初始化一些变量的设置。所以cocos2dx中的二段构建模式就是将new分配内存空间和init初始化内容分开来处理,而不是c++传统的做法在构造函数中初始化变量。

ps:相对于构造函数的好处:

1.构造函数中不可以使用虚函数 二段构建模式中的init()就可以

2.构造函数不可以有返回值 如果我们要返回异常判断信息我们就可以用二段构建模式(try——catch机制会增大二进制文件,于游戏编程中是不可以忍受无故的内存占用的)


2.单例模式

运用:导演类,缓存类,应用类。。。。等等很多很多

简单易用,限制一个类只有一个实例,可以降低创建多个对象可能会引起的内存问题的风险,包括内存泄漏、内存占用问题。

缺点:

单例模式因为提供了一个全局的访问点,你可以在程序的任何地方轻而易取地访问到,这本身就是一种高耦合的设计。一旦单例改变以后,其它模块都需要修改。另外,单例模式使得对象变成了全局的了。学过面对对象编程的人都知道,全局变量是非常邪恶的,要尽量不要使用。而且单例模式会使得对象的内存在程序结束之前一直存在,在一些使用GC的语言里面,这其实就是一种内存泄漏,因为它们永远都不到释放。当然,也可以通过提供一些特殊的方法来释放单例对象所占用的内存,比如前面提到的XXXCache对象,都有相应的Purge方法。最后,cocos2dx里面实现的单例,99%都不是线程安全的。

3.设计模式——工厂模式
cocos2dx中也有工厂模式,何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其他类对象的类,我们把这个创建其他类对象的类叫做工厂类,而这些被创建的对象叫做产品,所以这种模式才叫做工厂模式

简单工厂:当在程序中创建对象的时候少不了new,有时候new会很多,又分布在程序的不同地方,管理起来很不方便,这个时候需要一个工厂类,专门负责对象的创建和释放,将对象的这种操作统一在一起,同时工厂类向外部提供了创建对象的接口,而对对象的使用则和这个工厂类毫无关系。

工厂方法:有时候我们需要添加一个新的对象实例的时候我们就得去修改工厂类 这样很麻烦 我们用继承的思想 这个模式将Factory设计为抽象类,其中包含子类必须实现的方法,而对产品的具体创建则放到Factory的子类中去完成。

抽象工厂:现在我们的产品类都是继承自Product的,如果有一个产品不是Product的子类怎么办呢?这个时候就用到了抽象工厂模式,这个模式是工厂方法模式的叠加,其他的东西类似。

设计模式——管理者模式
首先明确一个问题,什么是管理者模式,管理类是用来管理一组相关对象的类,他提供了访问对象的接口,如果这么说比较抽象的话,我们来看下cocos2dx中都有哪些类是管理类你就会很明白了,例如TextureCache, SpriteFrameCache, AnimationCache,这些类都是管理类。就拿SpriteFrame来说,这个类管理了对象spriteframe,我们通过提供一个键来获得对应的值,像AnimationCache,TextureCache不都是这样吗,用一个键来获取对应的值。所以这些类都叫做管理类,因为他们管理着一组相关的对象。之所以使用管理者模式一个是因为为访问相关对象提供了统一的接口,另一个就是缓存游戏用到的资源,提高游戏的性能
设计模式——外观模式
仍然先来说明一下何为外观模式,一个复杂的系统包含很多子系统,为了使用这个复杂的系统,我们定义一个统一的接口来使用这个复杂的系统。当用户操作的时候只要调用我们提供的这个接口就好了,至于底层的这个复杂的系统,用户不必关系是如何工作的。这里列举一个网上的例子,编译系统是一个复杂的系统,包括什么词法分析,语法分析,语义分析等等,用户在编译程序的时候不需要了解这个复杂的系统到底是怎么编译的,只要使用统一的接口编译就可以了



Cocos2dx几种设计模式之三

设计模式——管理者模式 首先明确一个问题,什么是管理者模式,管理类是用来管理一组相关对象的类,他提供了访问对象的接口,如果这么说比较抽象的话,我们来看下cocos2dx中都有哪些类是管理类你...

cocos2dx的几种常见设计模式

设计模式——二段构建模式 设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!cocos2dx中有不少的设计模式,所以从本篇博客开始探讨一下cocos2...

cocos2dx场景A跳转到场景B,然后场景B再向A回传值(委托设计模式实现)。

场景B想场景A回传值的方法很多,这里主要是想讲一下c++实现的委托设计模式,主要为理解下一篇cocos2dx里面的SAX解析XML文件作铺垫。例子:点击“next”进入场景B,然后在场景B中点击upd...

cocos2dx几种设计模式之一

单例设计模式 在cocos2dx中存在不少的单例,虽然单例的设计模式引起不少弊端。我们使用单例目的就是获得全局的唯一一个对象,来做一些事情,那么什么时候用单例什么时候不用单例呢。我觉得一个是从道理...

Cocos2dx-lua实现单例设计模式

module("singleInstance",package.seeall) -- 成员变量 local instance = nil -- 静态方法 function getInstance(...

Cocos2dx几种设计模式之二

设计模式——工厂模式 cocos2dx中也有工厂模式,何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其他类对象的类,我们把这个创建其他类对象的类叫做工厂类,而这些被创建的对象...

cocos2dx设计模式之单例模式

在百度百科中对单例模式的介绍是这个样的: 单例模式 是一种常用的软件设计模式,在它的核心结构中只包含了一个被称为单例模式的特殊的类的,通过单例模式可以保证系统中一个类只有一个实例而且这个实例易于被外...

cocos2dx 设计模式 观察者模式 实现

注释: main(),主程序 IObservable,被观察者接口 CHanFeiZiObservable,被观察者韩非子 IObserver,观察者接口 CLiSiObserver...

Ubuntu Cocos2dx 学习笔记——Cocos2dx设计模式

设计模式介绍:     Cocos2dx 的设计模式大概可以类似于一部电影,包括几个部分:         1.CCDirector(大导演)   2.CCScene(场景)   3.CCLa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx中的设计模式
举报原因:
原因补充:

(最多只允许输入30个字)