这是一个C++单例类的实现方法。
#include "stdafx.h"
#include <iostream>
using namespace std;
//单例类的C++实现
class Singleton
{
private:
Singleton();//注意:构造方法私有
static Singleton* instance;//惟一实例
int var;//成员变量(用于测试)
public:
static Singleton* GetInstance();//工厂方法(用来获得实例)
int getVar();//获得var的值
};
//构造方法实现
Singleton::Singleton()
{
this->var = 20;
cout<<"Singleton Constructor"<<endl;
}
//初始化静态成员
Singleton* Singleton::instance=new Singleton(); //这条等于这个new Singleton(),
//是因为有这个this->var,this是本类的对象
Singleton* Singleton::GetInstance()
{
return instance;
}
int Singleton::getVar()
{
return this->var;
}
//main
int main(int argc, char* argv[])
{
Singleton *ton1 = Singleton::GetInstance();
cout<<"ton1 var = "<<ton1->getVar()<<endl;
system("pause");
return 0;
}
与上面的程序相比,下面的程序增加了保护性。
/*C++单例模式的实现*/
#include "stdafx.h"
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* getInstance();//一个类方法,返回Single类型指针
void setValue(int);
int getValue();
~Singleton();
private:
Singleton();//构造函数私有
static Singleton* instance;//唯一一个实例
int value;
};
Singleton* Singleton::instance=NULL;//必须类外定义初值NULL
Singleton* Singleton::getInstance()
{
if (NULL==instance)
{
instance=new Singleton();
}
return instance;
}
Singleton::Singleton()
{
this->value=100;
cout<<"Singleton Constructor!!!"<<endl;
}
Singleton::~Singleton()
{
cout<<"Singleton Destructor!!!"<<endl;
}
int Singleton::getValue()
{
return this->value;
}
void Singleton::setValue(int v)
{
value=v;
}
//测试程序
int main()
{
Singleton* s1=Singleton::getInstance();
Singleton* s2=Singleton::getInstance();
if(s1==s2)
cout<<"s1,s2相等,并指向唯一一个单例实例"<<endl;
cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;
cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;
s1->setValue(200);
cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;
cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;
delete Singleton::getInstance();
system("pause");
return 0;
}