#ifndef SINGLETON_H
#define SINGLETON_H
class Singleton
{
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
#endif // SINGLETON_H
#include "Singleton.h"
#include <iostream>
using namespace std;Singleton* Singleton::_instance = 0; //定义一个指针,如果先不用就要把它赋给0,//不然有可能会随意指向内存,造成程序崩溃。Singleton::Singleton(){
cout << "Singleton...." << endl;}
Singleton* Singleton::Instance(){
if(_instance == 0){_instance = new Singleton();}return _instance;}
#include "Singleton.h"#include <iostream>using namespace std;int main(int argc, char *argv[]){
Singleton* sgn = Singleton::Instance();return 0;}
Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。
这个模式主要是处理一些单线程问题。
Singleton模式经常和Factory(AbstractFactory)模式在一起使用,因为系统中工厂对象一般来说只要一个。
一、 Singleton模式的作用
Singleton模式提供了一个全局唯一访问类的方法,它在整个程序中只有一个实例,不允许出现多个。作用类似于全局变量。但是全局变量的类型依然可以实例化多个对象,从而不能保证唯一性,所以必须采用Singleton模式。
程序中经常将某种管理类,以Singleton模式实现,比如资源管理、路径服务、网络访问处理,这些在整个程序中都应该只有一个实例。
二、 Singleton模式的要点
要点1:Singleton类的构造函数必须是非Public的(及Private或Protected), 从而避免外部实例化该对象;
要点2:自己实例化自己;
要点3: Singleton类必须提供一个访问自己的接口(靠static声明的函数访问);