单例模式是十分常见的一种设计模式。一个确定的单例模式在程序中只会有一个实例,所以在一些系统中,希望某个类的实例只有一个,那么就可以将这个类定义为一个单例类。
之前用cocos2d-x写了个小游戏,因为游戏中的数据在各个layer中都是相同的,所以只需要一个实例就够了,所以就将游戏数据类定义为一个单例类。
下面是关于单例类的一段简单代码:
class Singleton
{
private:
Singleton(){}
public:
static Singleton* getInstance();
void run();
static Singleton* mInstance;
};
Singleton* Singleton::mInstance = NULL;
Singleton* Singleton::getInstance()
{
if(mInstance == NULL)
{
mInstance = new Singleton();
}
return mInstance;
}
void Singleton::run()
{
cout<<"This is Singleton"<<endl;
}
int main()
{
Singleton::getInstance()->run();
return 0;
}
运行结果如下:
在单例类中,定义一个静态的指向本类的指针mInstance,在类外对其进行初始化。由于将类的构造函数声明成了private,那么就意味着只能通过成员函数来调用单例类的构造函数,而不能在类外调用。所以要获取单例类的实例,只能通过类中的getInstance()方法来得到,第一次调用时执行new Singleton(),而之后再调用时,mInstance已经不为空,可以直接返回MInstance。而当需要调用单例类中的成员函数时,需要先得到单例类的mInstance指针,再调用成员函数。