欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 创建型设计模式——单例模式

创建型设计模式——单例模式

2025/6/25 21:55:58 来源:https://blog.csdn.net/weixin_44050362/article/details/148867405  浏览:    关键词:创建型设计模式——单例模式

单例设计模式

    • 什么是创建型设计模式
      • 有哪些创建型设计模式
    • 单例设计模式实现方法
      • 饿汉式单例
      • 懒汉式单例
      • 实现方法

CSDN——C++单例模式详解

单例设计模式是一种创建型设计模式

什么是创建型设计模式

创建型设计模式,就是通过控制对象的创建方式来解决设计问题。

有哪些创建型设计模式

  1. 单例设计模式
    在整个应用程序中,一个类只有一个实例,并且提供全局访问点
  2. 工厂设计模式
    将代码中散乱的new操作集中起来,放到工厂类中封装为方法,屏蔽复杂的初始化、多个参数的依赖,简化调用者的工作量;
    并且这些被管理的类,生命周期也交给工厂类管理;
  3. 抽象工厂模式
    有抽象工厂类和具体工厂类
    (1)抽象工厂针对每个产品提供一个创建方法
    (2)具体工厂继承自抽象工厂,实现具体的创建方法

单例设计模式实现方法

单例设计模式的实现分两种:饿汉式和懒汉式

饿汉式单例

特点:
实例在类加载时创建;c++中没有类加载概念,可以理解是静态变量初始化过程;
因为是类加载时创建,所以创建过程是线程安全的。

懒汉式单例

特点:
实例在第一次被请求时创建
非线程安全,因为多个线程可能同时调用instance()方法

实现方法

(1)在单例类中delete掉拷贝构造函数和赋值运算符重载函数,将要用来初始化的构造函数设置为私有成员。
(2)单例类声明一个该类指针类型的私有静态成员instance,用来指向最终的实例化对象,和一个用于初始化的公有静态成员函数instance();
instance()函数会返回实例对象的指针,instance函数中会判断静态成员instance是否为空来决定是否调用new来初始化;
饿汉式需要在全局调用instance函数,使实例在程序启动时被创建;
(3)如何实现懒汉式单例的线程安全
方法1:使用双重检查锁定:
在instance()函数中首先判定实例是否已经被创建,如果是,直接返回实例指针,如果没有被创建,就先加锁,然后再判断一次实例是否被创建,没有就创建对象;
由于双重检查锁定只在实例没有创建时才加锁和创建实例,所以不会导致性能下降
方法2:使用C++的局部静态变量:
在判断实例没有被创建时,创建一个局部静态instance变量,返回引用,把线程安全的工作交给编译器,编译器可能会使用更高效的方法来实现,比如原子操作+内存屏蔽,具体如何实现要看所处的平台以及编译器的选择

(4)可以结合RAII设计来实现自动管理单例对象生命周期
在单例类中添加一个helper成员类,helper构造时调用instance(),helper析构时调用disinstance()
单例类声明一个静态的helper类型变量,以程序的生命周期管理helper对象的生命周期,实现自动管理单例对象的生命周期。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词