单件模式及其厂类

来源:互联网 发布:淘宝量子统计没有了 编辑:程序博客网 时间:2024/04/29 12:34

如下是设计模式一书中给出的设计:

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;}


原创粉丝点击