做者 firedragonpzy 地址:http://www.firedragonpzy.com.cn/index.php/archives/2103php
想必讀者一看這個題目又要納悶了,神馬又是「管理者模式」啊?
管理者(Manager)就是專門負責管理其它類的實例的類,好比Cocoa裏面的NSFontManager、NSInputManager、NSFileManager和NSLayoutManager類。此模式和「二段構建模式」同樣,也沒有出如今GoF的23個設計模式中,可是《Cocoa設計模式》一書中有說起,感興趣的讀者能夠去查閱一下。java
1.應用場景:
在cocos2d-x裏面有大量的應用,好比以前在介紹單例模式中提到的CCTextureCache, CCSpriteFrameCache, CCAnimationCache和CCShaderCache類。
這些管理者通常被設計成單例類。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動做來播放動畫,這些動做的建立運行時開銷是比較大的,通常採用的方式都是在node的init方法中建立好,而後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