单例的一般实现比较简单,下面是代码和UML图。由于构造函数是私有的,因此无法通过构造函数实例化,唯一的方法就是通过调用静态函数GetInstance。
UML图:
- //Singleton.h
- class Singleton
- {
- public:
- static Singleton* GetInstance();
- private:
- Singleton() {}
- static Singleton *singleton;
- };
- //Singleton.cpp
- Singleton* Singleton::singleton = NULL;
- Singleton* Singleton::GetInstance()
- {
- if(singleton == NULL)
- singleton = new Singleton();
- return singleton;
- }
这里只有一个类,如何实现Singleton类的子类呢就说Singleton有很多子类,在一种应用中,只选择其中的一个。最容易就是在GetInstance函数中做判断,比如可以传递一个字符串,根据字符串的内容创建相应的子类实例。这也是DP书上的一种解法,书上给的代码不全。这里重新实现了一下,发现不是想象中的那么简单,最后实现的版本看上去很怪异。在VS2008下测试通过。
[cpp] view plain copy print
- //Singleton.h
- #pragma once
- #include <iostream>
- using namespace std;
- class Singleton
- {
- public:
- static Singleton* GetInstance(const char* name);
- virtual void Show() {}
- protected: //必须为保护,如果是私有属性,子类无法访问父类的构造函数
- Singleton() {}
- private:
- static Singleton *singleton; //唯一实例的指针
- };
- //Singleton.cpp
- #include “Singleton.h”
- #include “SingletonA.h”
- #include “SingletonB.h”
- Singleton* Singleton::singleton = NULL;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!