1. 程式人生 > >cocos2dx基礎篇(26) 單例模式

cocos2dx基礎篇(26) 單例模式

    單例模式,說的通俗一點就是:建立某個類的全域性唯一靜態例項物件。也就是說從它建立開始,一直到整個遊戲程式結束才會釋放資源,期間一直儲存的著資料。

    單例類在大部分遊戲中應該是必不可少的部分,如整個遊戲音樂的開關控制、資料的載入與儲存等都需要一個全域性訪問點來控制,那就需要用到單例類了。

【3.x】

    shared***() 改為 getInstance() 。

【單例模式】

    假如你是一個男的,但是你私生活不能自理:不會煮飯,洗衣服,穿的衣服永遠都no fashion。

    這時候你需要什麼?沒錯,需要一個女朋友!但這個女朋友你該怎麼“使用”呢?

    給你以下兩種選擇:

    (1)要洗衣服的時候“建立”一個女朋友(也就是去找一個女朋友),洗完後將女朋友甩了;

         當你要做飯,繼續“建立”一個女朋友,做完後甩掉;

         甚至是當你需要滿足某種不可告人的需求時,你需要“建立”一個女朋友...然後...

    (2)找一個可以過一輩子的女朋友,永遠在一起,你若不離,她便不棄!

         想怎麼用就怎麼用,省去了相親等一系列麻煩!

    以上兩種方法雖然都可以讓你告別你的右手,但是第一種方法的前提條件太誇張了:你要是一個高富帥

1、cocos2dx中的單例模式

    cocos2dx中其實存在很多的單例類,相信大家也都接觸過。

    例如:CCDirectorSimpleAudioEngineCCUserDefaultCCSpriteFrameCache等都是用了單例模式,並可以通過shared***()來獲取單例物件,如CCDirector::sharedDirector()

2、建立單例類

    2.1、宣告.h

//
	class Global : cocos2d::CCObject {

	private:
		static Global* m_global;      //唯一靜態例項物件m_global

	public:
		static Global* shareGlobal(); //獲取全域性訪問點m_global

	//其他屬性函式的宣告
	//......
	};
//

    2.2、定義實現.cpp

//
	//初始化單例唯一例項物件m_global
	Global* Global::m_global = NULL;

	//獲取全域性訪問點
	Global* Global::shareGlobal() 
	{
		//判斷m_global是否已被例項化,如果沒有,將之例項  
		if(m_global == NULL) {
			m_global = new Global();
		}
		return m_global;
	}

	//其他函式的定義實現
	//......
//