Singleton模式
Singleton模式是解决怎么创建唯一对象问题的.在面向过程的设计语言中,我们可以通过创建全局对象来实现;在面向对象的设计语言中,也可以这样做,但是除此之外还有更好的解决方法:Singleton模式.
Singleton模式十分简单,用一个static成员变量来记录唯一的对象实例,通过static接口来获取此实例,爱类外禁用构造函数防止创建类的实例.
下面是Singleton模式的类图结构:
下面通过一个例子来演示.在例子中有一个data,初始化为0,创建一个实例,之后把data改为10,再创建另一个实例,可以看到新创建的实例中data仍然为10,且构造函数只运行了一次.
//singleton.h
#ifndef _SINGLETON_H
#define _SINGLETON_H
class Singleton
{
protected:
Singleton();
public:
static Singleton* Instance();
int data;
private:
static Singleton* _instance;
};
#endif
//singleton.cpp
#include"singleton.h"
#include<iostream>
Singleton* Singleton::_instance = NULL;
Singleton::Singleton()
{
std::cout << "Singleton Ctor" << std::endl;
data = 0;
}
Singleton* Singleton::Instance()
{
if (_instance == NULL)
_instance = new Singleton();
return _instance;
}
//main.cpp
#include"singleton.h"
#include<iostream>
int main()
{
Singleton* s1 = Singleton::Instance();
std::cout << s1->data << std::endl;
Singleton* s2 = Singleton::Instance();
s1->data = 10;
std::cout << s2->data << std::endl;
return 0;
}