关闭

cocos2dx中的设计模式

207人阅读 评论(0) 收藏 举报

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不都是这样吗,用一个键来获取对应的值。所以这些类都叫做管理类,因为他们管理着一组相关的对象。之所以使用管理者模式一个是因为为访问相关对象提供了统一的接口,另一个就是缓存游戏用到的资源,提高游戏的性能
设计模式——外观模式
仍然先来说明一下何为外观模式,一个复杂的系统包含很多子系统,为了使用这个复杂的系统,我们定义一个统一的接口来使用这个复杂的系统。当用户操作的时候只要调用我们提供的这个接口就好了,至于底层的这个复杂的系统,用户不必关系是如何工作的。这里列举一个网上的例子,编译系统是一个复杂的系统,包括什么词法分析,语法分析,语义分析等等,用户在编译程序的时候不需要了解这个复杂的系统到底是怎么编译的,只要使用统一的接口编译就可以了



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9489次
    • 积分:383
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:16篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论