cocos2d-x 常用设计模式
环境: cocos2d-x 3.10 Xcode
单例模式
用于保证一个类仅有一个实例,具有全局变量的特点(即在任何位置可通过接口获取唯一实例)。对于频繁的创建或销毁的实例,使用该模式有助于减少内存开销。示例:
// .h class Singleton: { public: static Singleton* getInstance(); private: Singleton() {} // 要保证构造函数时私有的 static Singleton *m_Instance; } // .cpp static Singleton *m_Instance = NULL; Singleton* Singleton::getInstance() { if(NULL == m_Instance) { m_Instance = new Singleton(); } return m_Instance; }
cocos2d-x中常有的类有:Director, TextureCache, SpriteFrameCache, AnimationCache, UserDefault, PoolManager, FileUtils, Application等。
二段构建模式
指对象创建时并不直接通过构建函数来分配内存并完成初始化操作,而是构造函数仅分配内存,初始化交由init方法来完成。比如:
Node * Node::create() { // 阶段1: 创建对象,分配内存 Node * ret = new (std::nothrow) Node(); // 阶段2: 初始化 if (ret && ret->init()) { // 内存管理 ret->autorelease(); } else { CC_SAFE_DELETE(ret); } return ret; }
管理者模式
用于提供一个统一的接口来管理一组相关对象的实例化和访问。比如字体,纹理,精灵帧等的创建和管理工作。
一般被设计为单例模式,但也综合了外观模式,工厂模式等。
使用该模式可缓存游戏中的常用资源,提高游戏运行时的性能。
cocos2d-x中的常有的类有TextureCache, SpriteFrameCache, AnimationCache, PoolManager等。
外观模式
用于隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口。
该模式用于为子系统中的一组接口提供一个一致的页面,并定义了一个高层接口,该接口更方便客户调用该子系统。
cocos2d-x中的类有:SimpleAudioEngine等。
观察者模式
又称为订阅发布模式。主要用于定义对象间的一种一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都会得到通知并自动更新。
该模式会将订阅者和发布者分开,通过一个管理器来处理发布者和多个订阅者之间的关系。这样做的好处有:
减少发布者与订阅者之间的耦合性,假如A要调用B的method()方法,可能需要初始化B;或者B发生改变,A因此也要及时更新等
甚至于某些情况下B发生了变化,而没有及时通知A
在cocos2d中的事件机制,以及cocos-lua下的event.lua的实现,就是使用的该模式
-- cocos/framework/components/event.lua -- 事件分发:dispatchEvent -- 订阅者监听:addEventListener 可有多个 -- 订阅者删除:removeEventListener
MVC模式
观察者模式的主要组成部分,Model(模型)-View(视图)-Controller(控制器)。
Model: 数据逻辑相关,在数据变化时用于更新Controller控制器
Controller: 数据变化时,用于更新Views
View:界面显示相关,可有多个,不做数据处理,仅做显示使用

浙公网安备 33010602011771号