今天学习的设计模式是最基础,也是最常用的Singleton模式。该模式解决的问题也十分常见,就是我们需要惟一的创建一个实例的场景。在一些场景,我们普遍是用一个全局变量来实现控制,但是在需要纯粹的面向对象的范式中,我们必须要用标准的Singleton模式了,基本结构图如下:
我们通过维护一个唯一的static变量来记录这个唯一的对象实例,通过提供一个static的接口instance()来获得这个唯一的实例。
//Singleton.h
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
#endif //~_SINGLETON_H_
//Singleton.cpp
#include "Singleton.h"
#include <iostream>
using namespace std;
Singleton* Singleton::_instance = 0;
Singleton::Singleton()
{
cout<<"Singleton...."<<endl;
}
Singleton* Singleton::Instance()
{
if (_instance == 0)
{
_instance = new Singleton();
}
return _instance;
}
//main.cpp
#include "Singleton.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
Singleton* sgn = Singleton::Instance();
return 0;
}
注意:
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。