当前位置: 首页 > news >正文

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

单例设计模式

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

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对象的生命周期,实现自动管理单例对象的生命周期。

相关文章:

  • 手机网站建设是什么百度官网电话
  • 上虞网站开发网络营销ppt
  • wordpress 标题 搜索网站关键词怎么优化到首页
  • 北京网站建设模板主题工厂管理培训课程
  • wordpress首页文章轮播网站seo服务
  • 新浪博客怎么做网站亚洲长尾关键词挖掘
  • C++的单例模式
  • dify动手实践课6
  • 关于 Babel 编译后的 Generator 状态机结构解析
  • 数据赋能(319)——安全与合规——数据安全可控
  • 美团小程序闪购 mtgsig1.2
  • 第三节 布局与盒模型-盒模型与box-sizing
  • 【二】19.关于LCD和LTDC
  • 从零搭建共享棋牌室物联网系统:硬件选型与避坑指南!
  • 发布 npm 包完整指南(含账号注册、发布撤销与注意事项)
  • 文件锁的艺术:深入解析 `fcntl(F_SETLK/F_GETLK)`
  • C# WinForms 日志实现与封装
  • Flink状态和容错-基础篇
  • Golang Kratos 系列:领域层model定义是自洽还是直接依赖第三方(三)
  • 帮助装修公司拓展客户资源的微信装修小程序怎么做?
  • 重点解析(软件工程)
  • MonkeyOCR在Win习题部署指南和报错提醒
  • 谷歌 Gemini 2.5 系列模型:性能、功能与应用全方位解析​
  • 深入理解RAG:大语言模型时代的知识增强架构
  • pyqt多界面
  • 人机协作新篇章:艾利特按摩机器人如何重塑健康生活