CSingleton * CSingleton ::m_pRemainder = NULL;
CSingleton * CSingleton ::Instance(void)
...{
if (m_pSingleton == NULL)...{
m_pSingleton= new CSingleton ();
}
return m_pSingleton;
}
class CSingleton
...{
public:
CSingleton();
virtual ~CSingleton();
static CSingleton* Instance(void);
private:
/**//*単一のインスタンス*/
static CSingleton* m_pSingleton;
};意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
动机:对一些类来说,只有一个实例是很重要的,例如对系统资源的控制。保证一个类只有一个实例并且这个实例易于被访问,有一个好方法来实现,就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法,这就是Singleton模式

class Singleton ...{
public:
static Singleton* Instance() ;
protected: 
Singleton() ...{}
private:
static Singleton *_instance ;
} ;
Singleton* Singleton::_instance = 0 ; 
Singleton* Singleton::Instance() ...{
if (_instance == 0)...{
_instance = new Singleton; //lazy initialization
}
return _instance ;
}因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
缩小名空间
Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。
Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。
另一种封装单件功能的方式是使用类操作(即C++中的静态成员函数或者是Smalltalk中的类方法)。但这两种语言技术都难以改变设计以允许一个类有多个实例。此外,C++中的静态成员函数不是虚函数,因此子类不能多态的重定义它们。
1509

被折叠的 条评论
为什么被折叠?



