设计模式之单例模式,懒汉模式与饿汉模式

本贴最后更新于 2160 天前,其中的信息可能已经时移俗易

单例模式是一种常用的软件设计模式,它保证在软件运行过程中对象在内存中只存在一份实例,单例模式通常有懒汉模式与饿汉模式。

1.懒汉模式

懒汉模式是在第一次调用的时候才创建实例,但是在多线程的环境下很可能创建多个实例,因此是线程不安全的。

C++代码:

class Singleton
{
    protected:
        Singleton(){}
        Singleton(const Singleton& singleton)(){}
    private:
        static Singleton* p;
    public:
        static Singleton* instance();
}
Singleton* Singleton::p = NULL;

Singleton* Singleton::instance()
{
if(NULL == p)
{
//多线程不安全进入
p = new Singleton();
}

return p;

}

这里切记除了给类添加一个保护的构造函数外,还需添加一个保护的拷贝构造函数,不然编译器会给我们添加一个public访问标志的构造函数,这时我们按照下面这样可以生成多个实例:

Singleton* singleton = Singleton::instance();
//调用编译器提供的默认构造函数
Singleton singleton1 = *singleton;
Singleton singleton2 = *singleton;

2.饿汉模式

饿汉模式是在程序加载的时候就已经创建了一个实例,不存在多线程环境下创建多实例的问题,因此是线程安全的。

C++代码:

class Singleton
{
    protected:
        Singleton(){}
        Singleton(const Singleton& singleton)(){}
    private:
        static Singleton* p;
    public:
        static Singleton* instance();
}
Singleton* Singleton::p = new Singleton();

Singleton* Singleton::instance()
{
return p;
}

  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • Singleton
    5 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...