设计模式之单例模式

2014-11-23 23:41:31 · 作者: · 浏览: 0
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
特征:
一是一个类只能有一个实例;
二是它必须自行创建这个类的实例;
三是它必须能向整个 系统提供这个实例。
class single
{
private:
    static single* object;
    static int num;
    single(){num++;}
public:
    static single* getInstance();
    int getnum() {return num; }
};
这个单例类的实例和构造方法都是私有地,类外不能访问。用户访问实例唯一方法只有getInstance成员函数。任何创建新的对象的操作都将失败,因为类的构造函数是私有的。
single* single::object=NULL;
int single::num=0;
single* single::getInstance()
{
    if(object==NULL)
    {
        object=new single();
    }
    return object;
}
可以看出,getInstance函数使用的是懒惰初始化,即当这个函数首次被访问时这个实例才被创建。
当然也可以直接在类加载时就初始化:
single* single::object=new single();
int single::num=0;
single* single::getInstance()
{
    return object;
}
懒惰初始化又要处理线程安全问题:就是当多个线程同时使用getInstance函数时,它们将同时创建多个实例,这不是我们的初衷。在使用的时候需要注意。
int main()
{
    single* tmp1=single::getInstance();
    cout << tmp1->getnum()<< endl;
    single* tmp2=single::getInstance();
    cout << tmp2->getnum()<< endl;
    return 0;
}
测试输出num始终是1。说明只创建了一个实例。