cocos2d-x设计模式发掘之三:管理者模式
??
作者?firedragonpzy 地址:http://www.firedragonpzy.com.cn/index.php/archives/2103想必读者一看这个题目又要纳闷了,神马又是“管理者模式”啊? 1.应用场景: 为什么管理者类要设计成单例呢?因为管理者一般会采用key-value的形式来管理其它类的实例,每当需要获取一个管理者中的实例时,只需要提供一个惟一的键值字符串就可以得到一个与之对应的惟一实例。如果允许存在多个管理者实例的话,那么每个管理者都会维护各自的key-valuepairs。这样显然就不能通过键值字符串来获得惟一对象实例了。 CCSpriteFrameCache类通过定制的plist文件来实例化一系列相关的CCSpriteFrame实例,然后只需要提供精灵帧的名字就可以得到相应的CCSpriteFrame实例了。从这个意义上来说,CCSpriteFrameCache类也可以说是一个工厂类,专门负责生产CCSpriteFrame实例。同时,如果精灵帧名字相同的话,那么获取的精灵帧实例也是相同的。 2.使用管理者模式的优缺点。 缺点:由于管理者大多采用单例模式,所以,它继承了单例模式所有的缺点,这里就不再赘述了。 3.管理者模式的定义 class 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; 引申:但凡那些对象,在运行时创建的时间开销特别大时,而又要经常重复使用时,都可以采取此模式来提高运行时性能。 5.此模式经常与单例模式配合使用,它的一些设计思想也掺合了外观模式和工厂模式。 摘自:http://www.zilongshanren.com/cocos2d-x-design-pattern-3-managers/
欢迎关注关东升新浪微博@tony_关东升。 关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com 智捷课堂论坛网站:http://51work6.com/forum.php (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |