Singleton模式
一.意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点.
二.适用性
1. 当类只能有一个实例而且客户可以从一个总所周知的访问点访问它时.
2. 当这个唯一实例应该是通过子类化可扩展的.并且客户应该无需更改代码就能使用一个扩展的实例时.
三.代码
1. 基本单列模式,线程不安全
#include<iostream>
#include"csingleton.h"
usingnamespacestd;
//singletonmode
classCSingleton
{
private:
CSingleton(){}
virtual~CSingleton(){}
public:
staticCSingleton*getInstance();
intid=100;
};
staticCSingleton*singleton;
CSingleton*CSingleton::getInstance()
{
if(singleton==NULL)
{
singleton=newCSingleton();
}
returnsingleton;
}
intmain()
{
cout<<"HelloWorld!"<<endl;
CSingleton*singleton=CSingleton::getInstance();
cout<<"idvalue="<<singleton->id<<endl;
return0;
}
2.线程安全
CSingleton*CSingleton::getInstance()
{
if(singleton==NULL)
{
//加锁
if(singleton==NULL)
{
singleton=newCSingleton();
}
//解锁
}
returnsingleton;
}