首页 > 代码库 > 单例模式

单例模式

《大话设计模式》中这样引出单例模式。很形象生动。

有些类也需要计划生育

“大鸟,今天我在公司写一个MDI窗体程序,当中有一个是“工具栏”的窗体,问题是,我希望工具箱要么不出现,出现也只出现一个,可实际上却是我每次点击菜单,实例化‘工具箱’,它就会出来一个,这样点击多次就会出来多个,你说怎么办??”

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

先附上代码:

#include <iostream>
using namespace std;

class Singleton
{
private:
    Singleton() {}
    //把复制构造函数和=操作符也设置为私有,防止被复制
    Singleton(const Singleton&) {}
    Singleton& operator=(const Singleton&) {}

    static Singleton* obj;

public:
    static Singleton* GetObj()
    {
        if(obj == NULL)
            obj = new Singleton();
        else
            return obj;
    }
};

//在此处初始化
Singleton* Singleton:: obj = NULL;

int main()
{
    Singleton* singleton1 = Singleton::GetObj();
    Singleton* singleton2 = Singleton::GetObj();

    if(singleton1 == singleton2)
        printf("singleton1 == singleton2\n");
    return 0;
}

 

单例模式