单例模式
概念:单例模式是指一个系统中,一个类只有一个对象的模式,多出要用到这个类时通过类的一个全局访问点来共享类的对象,类的实例化是通过类自身的机制完成,也就是在类里面进行。
实现原理:为了保证整个系统中只有一个对象,可以将类的构造函数设为private型,这样,在类以外就不能用new形式来初始化对象了。因为类只有一个实例化,我们可以采用将类的对象放在类里面并设成private static型,再通过一个公共当问点static成员函数访问对象,这个公共访问点必须拥有一种机制——如果第一次使用需要新实例化一个对象,否则使用之前实例化的对象。
大体可以用下面代码段来描述:
#include <iostream>
using namespace std;
class singleClass
{
private:
static singleClass *singleObject;
singleClass(void){}
public:
static singleClass *getObject(void);
};
singleClass* singleClass::singleObject = NULL;
singleClass* singleClass::getObject(void)
{
if(singleObject == NULL)
{
singleObject = new singleClass();
}
return singleObject;
}
int main(void)
{
singleClass *object1 = singleClass::getObject();
singleClass *object2 = singleClass::getObject();
singleClass *object3 = object2->getObject();
//singleClass *object4 = new singleClass(); //错误的方式。
cout<<"object1 addr: 0x"<<object1<<endl;
cout<<"object2 addr: 0x"<<object2<<endl;
cout<<"object3 addr: 0x"<<object3<<endl;
cin.get();
return 0;
}
实用范围:一个学校的信息管理系统,校长类就只有一个实例;windows的任务管、理器也只有一个实例。
操作系统运行期间有一个堆空间,所有进程共享这个堆空间等,都可以用单例模式来实现。