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:界面显示相关,可有多个,不做数据处理,仅做显示使用

 

posted @ 2020-03-24 23:27  Code~  阅读(548)  评论(0)    收藏  举报