cocos2d-x设计模式发掘之三:管理者模式

  做者 firedragonpzy    地址:http://www.firedragonpzy.com.cn/index.php/archives/2103php

想必读者一看这个题目又要纳闷了,神马又是管理者模式啊?
   管理者(Manager)就是专门负责管理其它类的实例的类,好比Cocoa里面的NSFontManagerNSInputManagerNSFileManagerNSLayoutManager类。此模式和二段构建模式同样,也没有出如今GoF23个设计模式中,可是《Cocoa设计模式》一书中有说起,感兴趣的读者能够去查阅一下。
java

1.应用场景:
    在cocos2d-x里面有大量的应用,好比以前在介绍单例模式中提到的CCTextureCache, CCSpriteFrameCache, CCAnimationCacheCCShaderCache类。
这些管理者通常被设计成单例类。
node

   为何管理者类要设计成单例呢?由于管理者通常会采用key-value的形式来管理其它类的实例,每当须要获取一个管理者中的实例时,只须要提供一个唯一的键值字符串就能够获得一个与之对应的唯一实例。若是容许存在多个管理者实例的话,那么每一个管理者都会维护各自的key-value pairs。这样显然就不能经过键值字符串来得到唯一对象实例了。设计模式

     CCSpriteFrameCache类经过定制的plist文件来实例化一系列相关的CCSpriteFrame实例,而后只须要提供精灵帧的名字就能够获得相应的CCSpriteFrame实例了。从这个意义上来讲,CCSpriteFrameCache类也能够说是一个工厂类,专门负责生产CCSpriteFrame实例。同时,若是精灵帧名字相同的话,那么获取的精灵帧实例也是相同的。缓存

2.使用管理者模式的优缺点。
   优势:为一组相关的对象提供一个统一的全局访问点,同时能够提供一些简洁的接口来获取和操做这些对象。同时,使用此模式来缓存游戏中的经常使用资源,能够提升游戏运行时性能。
微信

   缺点:因为管理者大多采用单例模式,因此,它继承了单例模式全部的缺点,这里就再也不赘述了。性能

3.管理者模式的定义
   管理者类(cache类)能够简化一些能够重用的资源(好比字体、纹理、精灵帧等)的建立和管理工做。管理者模式实际上是个混合模式,它综合了单例模式、外观模式和工厂模式。该模式在游戏开发中比较常见,不少须要提高游戏运行性能的场合都运用了此模式。
此模式的动机:提供一个统一的接口来管理一组相关对象的实例化和访问。
它的通常实现以下:
字体

   

 

 


 
ass TestManager{ public: static TestManager *sharedTestManager(){ if (NULL == m_psManager) { m_psManager = new TestManager; instanceTable = CCDictionary::create(); instanceTable->retain(); } return m_psManager; } void purge(){ CC_SAFE_DELETE(m_psManager); CC_SAFE_RELEASE_NULL(instanceTable); } void registeInstance(const string& key,CCObject *obj){ instanceTable->setObject(ojb,key); } CCObject*  getInstance(const string& key){ return instanceTable->objectForKey(key); } private: static TestManager* m_psManager; CCDictionary  *instanceTable; //用来管理其它类的一组实例 };

 

TestManager* TestManager::m_psManager = NULL;
4.游戏开发中如何运用此模式
    在cocos2dx游戏开发中,常常须要使用CCAnimate动做来播放动画,这些动做的建立运行时开销是比较大的,通常采用的方式都是在nodeinit方法中建立好,而后retain。以后须要使用的时候直接引用此动做便可,前提是你得声明许多CCAnimate对象的弱引用。这里,咱们能够为之建立一个CCAnimateCache类,专门用来管理这些动画动做实例。这样对于游戏中常常变换状态须要更换不一样的动画时,能够今后CCAniamteCache类中获取相应动画引用,很是方便,同时能够提升游戏性能。相应的,也能够为Action建立相应的类。
动画

     引伸:但凡那些对象,在运行时建立的时间开销特别大时,而又要常常重复使用时,均可以采起此模式来提升运行时性能。网站

5.此模式常常与单例模式配合使用,它的一些设计思想也掺合了外观模式和工厂模式。

摘自:http://www.zilongshanren.com/cocos2d-x-design-pattern-3-managers/

 

 

欢迎关注关东升新浪微博@tony_ 关东升。

关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息

更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com

智捷课堂论坛网站:http://51work6.com/forum.php

相关文章
相关标签/搜索