【唠叨】

    单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象。也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据。

    单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐的开关控制、数据的加载与存储等都需要一个全局访问点来控制,那就需要用到单例类了。


【致谢】

    http://blog.csdn.net/star530/article/details/22610229


【3.x】

    shared***() 改为 getInstance()




【单例模式】

    有一个很形象的比喻,摘自:http://blog.csdn.net/star530/article/details/22610229

    假如你是一个男的,但是你私生活不能自理:不会煮饭,洗衣服,穿的衣服永远都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;
	}

	//其他函数的定义实现
	//......
//