Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了。
Singleton模式典型的结构图为
在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这
个唯一的对象实例。通过提供一个staitc的接口instance来获得这个唯一的实例。
代码如下:
- //Singleton.h
- #ifndef _SINGLETON_H_
- #define _SINGLETON_H_
- class Singleton
- {
- public:
- static Singleton* Instance();
- protected:
- Singleton();
- private:
- static Singleton* _instance;
- };
- #endif
- //Singleton.cpp
- #include "Singleton.h"
- #include <iostream>
- using namespace std;
- Singleton * Singleton::_instance=0;
- Singleton* Singleton::Instance()
- {
- if(_instance==0)
- {
- _instance=new Singleton();
- }
- else
- {
- cout<<"There is one instance,You can construct one more!"<<endl;
- }
- return _instance;
- }
- Singleton::Singleton()
- {
- cout<<"Constructing Singleton..."<<endl;
- }
- //main.cpp
- #include <iostream>
- #include "Singleton.h"
- using namespace std;
- void main()
- {
- Singleton *sgn=Singleton::Instance();
- }
需要说明的是,Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。