cocos2d x設計模式發掘之三 管理者模式

2021-07-05 02:50:12 字數 2419 閱讀 3608



想必讀者一看這個題目又要納悶了,神馬又是

「管理者模式」啊?

管理者(

manager

)就是專門負責管理其它類的例項的類,比如

cocoa

裡面的nsfontmanager

、nsinputmanager

、nsfilemanager

和nslayoutmanager

類。此模式和

「二段構建模式

」一樣,也沒有出現在

gof的

23個設計模式中,但是《

cocoa

設計模式》一書中有提及,感興趣的讀者可以去查閱一下。

1.

應用場景:

在cocos2d-x

裡面有大量的應用,比如之前在介紹單例模式中提到的

cctexturecache,ccspriteframecache, ccanimationcache

和ccshadercache

類。這些管理者一般被設計成單例類。

為什麼管理者類要設計成單例呢?因為管理者一般會採用

key-value

的形式來管理其它類的例項,每當需要獲取乙個管理者中的例項時,只需要提供乙個惟一的鍵值字串就可以得到乙個與之對應的惟一例項。如果允許存在多個管理者例項的話,那麼每個管理者都會維護各自的

key-valuepairs

。這樣顯然就不能通過鍵值字串來獲得惟一物件例項了。

ccspriteframecache

類通過定製的

plist

檔案來例項化一系列相關的

ccspriteframe

例項,然後只需要提供精靈幀的名字就可以得到相應的

ccspriteframe

例項了。從這個意義上來說,

ccspriteframecache

類也可以說是乙個工廠類,專門負責生產

ccspriteframe

例項。同時,如果精靈幀名字相同的話,那麼獲取的精靈幀例項也是相同的。

2.

使用管理者模式的優缺點。

優點:為一組相關的物件提供乙個統一的全域性訪問點,同時可以提供一些簡潔的介面來獲取和操作這些物件。同時,使用此模式來快取遊戲中的常用資源,可以提高遊戲執行時效能。

缺點:由於管理者大多採用單例模式,所以,它繼承了單例模式所有的缺點,這裡就不再贅述了。

3.

管理者模式的定義

管理者類(

cache

類)可以簡化一些可以重用的資源(比如字型、紋理、精靈幀等)的建立和管理工作。管理者模式其實是個混合模式,它綜合了單例模式、外觀模式和工廠模式。該模式在遊戲開發中比較常見,很多需要提公升遊戲執行效能的場合都運用了此模式。

此模式的動機:提供乙個統一的介面來管理一組相關物件的例項化和訪問。

它的一般實現如下:

class testmanager

return m_psmanager;

}void purge()

void registeinstance(const string& key,ccobject *obj)

ccobject* getinstance(const string& key)

private:

static testmanager* m_psmanager;

ccdictionary *instancetable; //用來管理其它類的一組例項

};

testmanager* testmanager::m_psmanager = null;

4.

遊戲開發中如何運用此模式

在cocos2dx

遊戲開發中,經常需要使用

ccanimate

node

的init

方法中建立好,然後

retain

。之後需要使用的時候直接引用此動作即可,前提是你得宣告許多

ccanimate

物件的弱引用。這裡,我們可以為之建立乙個

ccanimatecache

類,專門用來管理這些動畫動作例項。這樣對於遊戲中經常變換狀態需要更換不同的動畫時,可以從此

ccaniamtecache

類中獲取相應動畫引用,非常方便,同時可以提高遊戲效能。相應的,也可以為

action

建立相應的類。

引申:但凡那些物件,在執行時建立的時間開銷特別大時,而又要經常重複使用時,都可以採取此模式來提高執行時效能。

5.

此模式經常與單例模式配合使用,它的一些設計思想也摻合了外觀模式和工廠模式。

摘自:@tony_

關東昇。

智捷課堂論壇**:

cocos2d x設計模式發掘之五 防禦式程式設計模式

分類 cocos2d x 2013 04 10 02 58 342人閱讀 收藏 舉報 宣告 防禦式程式設計是提高程式 質量的一種手段,它不能算是真正意義上的模式。但是,這裡,我還是要給它冠之以 模式 二字。原因有2 1.cocos2d x的框架源 大量採用了防禦式程式設計技術,用來確保框架的 質量和...

Cocos2d x的設計模式

單例模式 單例模式的定義是產生乙個類的唯一例項,但js本身就是一種 無類 語言,很多講就是設計模式的文章把 當成乙個單例來使用也勉強說的通,因為js生成物件的方式有很多種。簡單工廠模式 簡單工廠模式是由乙個方法來決定到底要建立哪個類的例項,而這些例項經常都擁有相同的介面,這種模式主要用於在所例項化的...

Cocos2D X設計模式 組合模式

在開始挖掘cocos2d x裡面的組合模式之前,我先武斷地下個結論 幾乎所有與gui相關的框架設計都應用了組合設計模式 ps 大家注意我的用詞,是 幾乎所有 給自己留條後路,哈哈 說到樹,我們馬上就會想到樹根,樹幹和樹葉。一棵樹一般只包含乙個根,若干樹幹和大量的葉子。同時,樹幹長在樹根上,樹葉長在樹...