单例模式

Posted 生命不息奋斗不止

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

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

有些类也需要计划生育

“大鸟,今天我在公司写一个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;
}

 

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块