cocos2dx中的設計模式

2021-07-12 07:01:33 字數 2038 閱讀 9116

1.二段構建模式

大家都知道在c++中我們一般在建構函式中為物件分配記憶體空間然後初始化成員變數,比如我們呼叫了new某個東西,那麼在堆上會先為物件分配記憶體空間,然後呼叫建構函式,在建構函式中完成一些初始化的工作。而二段構建模式就是將記憶體空間的分配和初始化分開來完成,然後呼叫乙個靜態方法來返回這個物件。就拿cocos2dx中的sprite類來說吧,當我們呼叫sprite::create()的時候內部先使用new來分配記憶體空間,然後呼叫init方法來初始化一些變數的設定。

所以cocos2dx中的二段構建模式就是將new分配記憶體空間和init初始化內容分開來處理

,而不是c++傳統的做法在建構函式中初始化變數。

ps:相對於建構函式的好處:

1.建構函式中不可以使用虛函式 二段構建模式中的init()就可以

2.建構函式不可以有返回值 如果我們要返回異常判斷資訊我們就可以用二段構建模式(

try——catch機制會增大二進位制檔案,於遊戲程式設計中是不可以忍受無故的記憶體占用的)

2.單例模式

運用:導演類,快取類,應用類。。。。等等很多很多

簡單易用,限制乙個類只有乙個例項,可以降低建立多個物件可能會引起的記憶體問題的風險,包括記憶體洩漏、記憶體占用問題。

缺點:單例模式因為提供了乙個全域性的訪問點,你可以在程式的任何地方輕而易取地訪問到,這本身就是一種高耦合的設計。一旦單例改變以後,其它模組都需要修改。另外,單例模式使得物件變成了全域性的了。學過面對物件程式設計的人都知道,全域性變數是非常**的,要盡量不要使用。而且單例模式會使得物件的內存在程式結束之前一直存在,在一些使用gc的語言裡面,這其實就是一種記憶體洩漏,因為它們永遠都不到釋放。當然,也可以通過提供一些特殊的方法來釋放單例物件所占用的記憶體,比如前面提到的***cache物件,都有相應的purge方法。最後,cocos2dx裡面實現的單例,99%都不是執行緒安全的。

3.設計模式——工廠模式

cocos2dx中也有

工廠模式

,何為工廠模式,顧名思義就是用來產生產品的,工廠就是用來建立其他類物件的類,我們把這個建立其他類物件的類叫做工廠類,而這些被建立的物件叫做產品,所以這種模式才叫做工廠模式

簡單工廠:

當在程式中建立物件的時候少不了new,有時候new會很多,又分布在程式的不同地方,管理起來很不方便,這個時候需要乙個工廠類,專門負責物件的建立和釋放,將物件的這種操作統一在一起,同時工廠類向外部提供了建立物件的介面,而對物件的使用則和這個工廠類毫無關係。

工廠方法:有時候我們需要新增乙個新的物件例項的時候我們就得去修改工廠類 這樣很麻煩 我們用繼承的思想 

這個模式將factory設計為抽象類,其中包含子類必須實現的方法,而對產品的具體建立則放到factory的子類中去完成。

抽象工廠:現在我們的產品類都是繼承自product的,如果有乙個產品不是product的子類怎麼辦呢?這個時候就用到了抽象工廠模式,這個模式是工廠方法模式的疊加,其他的東西類似。

設計模式——管理者模式

首先明確乙個問題,什麼是

管理者模式

,管理類是用來管理一組相關物件的類,他提供了訪問物件的介面,如果這麼說比較抽象的話,我們來看下cocos2dx中都有哪些類是管理類你就會很明白了,例如texturecache, spriteframecache, animationcache,這些類都是管理類。就拿spriteframe來說,這個類管理了物件spriteframe,我們通過提供乙個鍵來獲得對應的值,像animationcache,texturecache不都是這樣嗎,用乙個鍵來獲取對應的值。所以這些類都叫做管理類,因為他們管理著一組相關的物件。之所以使用管理者模式乙個是因為為訪問相關物件提供了統一的介面,另乙個就是快取遊戲用到的資源,提高遊戲的效能

設計模式——外觀模式

仍然先來說明一下何為

外觀模式

,乙個複雜的系統包含很多子系統,為了使用這個複雜的系統,我們定義乙個統一的介面來使用這個複雜的系統。當使用者操作的時候只要呼叫我們提供的這個介面就好了,至於底層的這個複雜的系統,使用者不必關係是如何工作的。這裡列舉乙個網上的例子,編譯系統是乙個複雜的系統,包括什麼詞法分析,語法分析,語義分析等等,使用者在編譯程式的時候不需要了解這個複雜的系統到底是怎麼編譯的,只要使用統一的介面編譯就可以了

Cocos2d x的設計模式

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

Cocos2D X設計模式 組合模式

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

cocos2d x 混合模式

在opengl es 使用glblendfunc函式實現實現混合模式,cocos2d x中可以使用blendfunc。什麼是顏色混合?簡單來說就是將rgba中的a,經行操作處理。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。opengl 會把源顏...