1. 标准的实现
-----------------------------Singleton.h-------------------------------
#inndef _SINGLETON_H_
#define _SINGLETON_H_
#include<iostream>
using namespace std;
class Singleton
{
public:
static Singleton * Instance();
protected:
Singleton();
private:
static Singleton * m_instance;
};
#endif
-----------------------------Singleton.cpp-------------------------------
#include "Singleton.h"
#include<iostream>
using namespace std;
Singleton * Singleton::m_instance = NULL;
Singleton::Singleton()
{
cout <<"Singleton..."<<endl;
}
Singleton* Singleton::Instance()
{
if(m_Instance == NULL)
{
m_Instance = new Singleton();
}
return m_Instance;
}
-----------------------------main.cpp-------------------------------
#include"Singleton.h"
#include<iostream>
using namesapce std;
int main(int argc,char *argv[])
{
Singleton *sgn1 = Singleton::Instance();
Singleton *sgn2 = Singleton::Instance();
if (sgn1 == sgn2)
{
cout << "sng1 == sgn2"<<endl;
}
else
{
cout <<"sng1 != sgn2"<<endl;
}
return 0;
}
上面的程序必须记住在程序结束的时候,释放内存
Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情。
Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。
Singleton模式经常和Factory(AbstractFactory)模式一起使用,工厂对象实现可以同时是一个Singleton模式的实例.因为系统中只需要一个工厂来创建对象就可以了。
单例模式保证一个类仅有一个实例。