长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 创建型模式

    • 工厂方法模式(Factory Method Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 单例模式(Singleton Pattern)
      • 概念
      • 思想
      • 角色
      • 优点
      • 缺点
      • 类图
      • 时序图
      • 示例代码
    • 建造者模式(Builder Pattern)
    • 原型模式(Prototype Pattern)
  • 结构型模式

  • 行为型模式

  • 设计模式
  • 创建型模式
DC Wang
2023-05-28
目录

单例模式(Singleton Pattern)

# 单例模式(Singleton Pattern)

# 概念

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点以访问该实例。

# 思想

单例模式的思想是通过限制类的实例化过程,确保在运行时只存在一个该类的实例。这样可以方便地共享实例,并且确保在整个应用程序中只有一个实例被使用。

# 角色

  • Singleton(单例):定义一个静态方法或者静态成员变量来获取该类的唯一实例。
  • Client(客户端):使用Singleton类的对象实例。

# 优点

  • 提供了对唯一实例的控制和管理,确保在整个应用程序中只有一个实例存在。
  • 全局访问点使得单例实例可以被轻松地访问。

# 缺点

  • 单例模式在多线程环境下需要注意线程安全问题。
  • 单例模式可能导致代码的耦合度增加,因为它引入了全局状态。

# 类图

@startuml
class Singleton {
    - static instance: Singleton
    - constructor Singleton()
    + static getInstance(): Singleton
    + operation(): void
}
note top of Singleton: 单例类
note right of Singleton::getInstance
    返回单例实例
end note
Client --> Singleton::getInstance
Client --> Singleton::operation
@enduml
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 时序图

@startuml
Client -> Singleton: getInstance()
activate Singleton
Singleton -> Singleton: 创建实例
Singleton --> Client: 返回实例
deactivate Singleton
Client -> Singleton: operation()
activate Singleton
Singleton --> Client: 执行操作
deactivate Singleton
@enduml
1
2
3
4
5
6
7
8
9
10
11

# 示例代码

#include <iostream>

class Singleton {
private:
    static Singleton* instance;

    Singleton() {}

public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }

    void operation() {
        std::cout << "Executing operation" << std::endl;
    }
};

Singleton* Singleton::instance = nullptr;

int main() {
    Singleton* singleton = Singleton::getInstance();
    singleton->operation();
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

示例代码中定义了一个名为Singleton的类,其中包含一个静态成员变量instance来保存唯一实例的引用。通过静态方法getInstance(),可以获取该类的唯一实例。在示例代码的主函数中,首先获取了Singleton的实例,然后调用了operation()方法执行操作。

示例代码的运行结果:

Executing operation
1

示例代码首先获取Singleton的实例,然后调用operation()方法打印出"Executing operation"。这证明在整个应用程序中只有一个Singleton的实例,并且可以通过全局访问点进行访问。

编辑 (opens new window)
#设计模式#创建型模式
上次更新: 2023/06/09, 13:17:31
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)

← 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern)→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式