cocos2d-x中用singleton(单例)设计模式共享数据

时间:2022-09-02 07:57:20

    因为需要在不同的scene间共享游戏数据,所以有了singleton的需求,google了一下,已经有现成的说明了,原文地址:http://zilongshanren.com/blog/2012/09/23/cocos2d-x-design-pattern-singleton1/。这里只摘抄感兴趣的部分:


     游戏开发中如何运用此模式呢?众所周知,游戏开发中离不开游戏数据保存和加载。这些数据包括关卡数据、游戏进行中的状态数据等。这样一些信息很多游戏模块中都需要访问,所以可以为之设置一个单例对象。我武断地认为,客户端游戏开发中,至少需要一个单例对象。因为一个全局的访问点可以方便很多对象之间的交互。根据之前的讨论,也可以把一些时觉需要用到的类引用保存在此单例对象中,不过只需要保存弱引用即可。使用单例,最严重的就是怕内存泄漏,所以,大家尽量不要把单例类设计地太复杂,也不要让它包含过多的动态内存管理工作。

    

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局的访问点。

它的一般实现如下所示:

Singleton
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Singleton
{
public:
//全局访问点
static Singleton* SharedSingleton()
{
if(NULL == m_spSingleton)
{
m_spSingleton = new Singleton();
}
return m_spSingleton;
}
private:
static Singleton* m_spSingleton;
Singleton();
Singleton(const Singleton& other);
Singleton& operator=(const Singleton& other);
};
Singleton* Singleton::m_spSingleton = NULL;

注意,这里只是最基本的实现,它没有考虑到线程安全,也没有考虑内存释放。但是,这个实现有两个最基本的要素。一:定义一个静态变量,并把构造函数等设置为私有的。二:提供一个全局的访问点给外部访问。