1、问题背景
Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式(如JAVA)中,这一点可能就只能是通过Singleton模式来实现了。
2、模式示意图
单件模式示意图
在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这
个唯一的对象实例。通过提供一个staitc的接口fnInstance来获得这个唯一的实例。
3、代码实现
代码实现如下:
//////////////////////////////////////////////////////////////////////////
//Singleton.h
//////////////////////////////////////////////////////////////////////////
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* fnInstance();
public:
void fnOperateSingleton();
protected:
Singleton();
private:
static Singleton* _instance;
};
#endif //#ifndef _SINGLETON_H_
//////////////////////////////////////////////////////////////////////////
//Singleton.cpp
//////////////////////////////////////////////////////////////////////////
#include “Singleton.h”
Singleton* Singleton::_instance = NULL;
Singleton::Singleton()
{
cout<<“Construct Singleton….”<<endl;
}
Singleton* Singleton::fnInstance()
{
if (NULL == _instance)
{
_instance = new Singleton();
}
return _instance;
}
void Singleton::fnOperateSingleton()
{
cout<<“Operate the singleton!”<<endl;
}
//////////////////////////////////////////////////////////////////////////
//main.cpp
//////////////////////////////////////////////////////////////////////////
#include “Singleton.h”
void main()
{
Singleton *pSingleton = Singleton::fnInstance();
pSingleton->fnOperateSingleton();
delete pSingleton;
pSingleton = NULL;
}
运行结果如下:
Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。
4、总结与讨论
Singleton模式在开发中经常用到,因为我们在开发过程中有一些对象在整个系统中需要是唯一的。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!