如下是设计模式一书中给出的设计:
class Singleton
{
public:
static Singleton *Instance();
int i;
protected:
Singleton(){}
private:
static Singleton* _instance;
};
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance()
{
if(_instance == 0)
{
_instance = new Singleton;
}
return _instance;
}
随后介绍的单件模式的厂类,感觉不是很方便。
在此设计上我想用泛型实现:
template <class T>
class Singleton
{
public:
static T *Initialize();
static void UnInitialize();
protected:
Singleton(){}
private:
static T* _instance;
};
template <class T>
T* Singleton<T>::_instance = 0;
template <class T>
T* Singleton<T>::Initialize()
{
if(_instance == 0)
{
_instance = new T;
}
return _instance;
}
template <class T>
void Singleton<T>::UnInitialize()
{
delete _instance;
_instance = NULL;
}
接下来是测试代码:
class A { public: int m; ~A() { cout<<"A end"<<endl; } }; class B { public: int func(); private: int k; }; int B::func() { k = 2; return k; } int _tmain(int argc, _TCHAR* argv[]) { //Singleton *ton = Singleton::Instance(); //ton->i = 1; //Singleton *ton1 = Singleton::Instance(); //cout<<ton1->i<<endl; A *ton = Singleton<A>::Initialize(); ton->m = 1; cout<<ton->m<<endl; //Singleton<A>::UnInitialize(); A *ton1 = Singleton<A>::Initialize(); //ton->m = 2; cout<<ton1->m<<endl; Singleton<A>::UnInitialize(); B *ton2 = Singleton<B>::Initialize(); cout<<ton2->func()<<endl; Singleton<B>::UnInitialize(); return 0; }