单件Singleton
来源:互联网 发布:淘宝新店敢买吗 编辑:程序博客网 时间:2024/05/03 19:22
什么是singleton?
它是一种方法,使的类的实例在程序中只有一个。它出现的原因是因为许多系统中一些对象只能存在一个,同时也是为取代全局变量和函数。
最简单来讲就是:
class OneClass
{
protect:
static OneClass m_Instance;
public:
static OneClass GetSingleton()
{
return m_Instance;
}
};
或者
class OneClass
{
public:
OneClass & Instance()
{
static OneClass m_Instance;
return m_Instance;
}
}
其实质就是定义静态变量并始终只返回此静态变量。
但是,要实现安全有效的使用singleton可以使用下面的模版技术。
《游戏编程精粹1》中介绍如下:
#include <cassert>
template <typename T> class Singleton
{
static T * ms_Singleton;
public:
Singleton( void )
{
assert(!ms_Singleton);
int offset = (int) (T*)1 - (int) (Singleton <T> *) (T*) 1;
ms_Singleton = (T*) ( (int) this + offset );
}
~Singleton (void)
{
assert(ms_Singleton);
ms_Singleton = 0;
}
static T& GetSingleton( void)
{
assert(ms_Singleton);
return (* ms_Singleton);
}
static T* GetSingletonPtr( void)
{
return (ms_Singleton);
}
};
template <typename T> T* Singleton <T>::ms_Singleton = 0;
接着就可以将任何类转化为singleton,可以按下面步骤:
1)从Singleton<MyClass>公开派生你的类MyClass;
2)确保使用前在系统中创建了MyClass的实例。可以设为静态也可以使用new和delete。
3)调用时使用MyClass::GetSingleton()方法。
下面是一个例子:
//定义
class App: public Singleton <App>
{
void Run(){};
}
//初始化
static App app1;
//访问
void SomeFunction()
{
App::GetSingleton.Run();
//... ...
}
- 回头看singleton(单件)
- 单件Singleton
- 单件Singleton
- singleton单件模式
- Singleton (单件模式)
- 单件模式(Singleton)
- singleton 单件模式
- 单件模式[Singleton]
- 单件模型 Singleton
- SingleTon单件模式
- 单件模式(Singleton)
- Singleton 单件模式
- 单件模式-Singleton
- Singleton单件模式
- 【单件模式-Singleton】
- 单件模式(Singleton)
- 单件Singleton
- 单件模式(Singleton Pattern)
- 沙漠 草原 湖泊 羊群 骆驼(1)
- 学习Java的30个基本概念(转)
- java获取所有网卡和ip地址
- Oracle Procedure and Function
- Exception handling
- 单件Singleton
- UI设计消息路由设想之一---System Event Translator
- 中国的银行就是他妈的强盗!
- 夜宴~~
- dong程see就
- 这是BLOG的开始,留个记号
- B/S(.net)文件下载方式
- 沙漠 草原 湖泊 羊群 骆驼(2)
- const使用详解