设计模式之单例模式

简介

单例模式(Singleton Pattern)是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在某些情况下非常有用,比如需要一个唯一的配置管理器、日志记录器、或资源管理器。

单例模式的特点

  1. 唯一实例:类内部维护一个唯一实例,确保类的实例只有一个。
  2. 全局访问点:提供一个全局访问点,以便其他类可以通过这个访问点获取该实例。
  3. 延迟实例化:可以延迟创建实例,直到第一次使用时才进行实例化(懒汉模式)。

实现单例模式

饿汉模式

这种方法在类加载时就创建实例,比较简单,但如果实例占用资源较大而且在实际运行中未使用,会造成资源浪费。

class Singleton {
    private static instance: Singleton = new Singleton();
    private constructor() { }
    public static getInstance(): Singleton {
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}
// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();
懒汉模式

这种方法在第一次调用 getInstance 方法时才创建实例,适合需要延迟加载的情况。

class Singleton {
    private static instance: Singleton;
    private constructor() { }
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}
// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();
线程安全的懒汉模式

在多线程环境中,需要确保实例创建的线程安全性。

class Singleton {
    private static instance: Singleton;
    private static lock = new Object();
    private constructor() { }
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            synchronized (Singleton.lock) {
                if (!Singleton.instance) {
                    Singleton.instance = new Singleton();
                }
            }
        }
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}

// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();

单例模式的优缺点

优点:

  • 控制实例数量:确保类只有一个实例,节省资源。
  • 全局访问:提供全局访问点,方便访问实例。
  • 延迟加载:可以实现延迟加载,减少不必要的资源消耗。

缺点:

  • 扩展性差:单例类难以扩展,尤其是在需要子类化的情况下。
  • 多线程问题:在多线程环境下,需要小心处理实例创建的线程安全问题。
  • 隐藏依赖:使用单例模式可能会隐藏类之间的依赖关系,使代码难以测试和维护。

相关推荐

  1. 【前端设计模式模式

    2024-07-12 02:00:01       56 阅读
  2. 设计模式模式

    2024-07-12 02:00:01       55 阅读
  3. C++设计模式模式

    2024-07-12 02:00:01       55 阅读
  4. 设计模式模式

    2024-07-12 02:00:01       50 阅读
  5. 设计模式模式

    2024-07-12 02:00:01       60 阅读
  6. 设计模式模式

    2024-07-12 02:00:01       50 阅读
  7. 【软件设计模式模式

    2024-07-12 02:00:01       54 阅读
  8. c++设计模式模式

    2024-07-12 02:00:01       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 02:00:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 02:00:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 02:00:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 02:00:01       69 阅读

热门阅读

  1. 软件架构之测评方法

    2024-07-12 02:00:01       15 阅读
  2. Webpack打包生产环境进行优化处理

    2024-07-12 02:00:01       20 阅读
  3. 【深度学习】关于模型加速

    2024-07-12 02:00:01       22 阅读
  4. k8s 部署RuoYi-Vue-Plus之mysql搭建

    2024-07-12 02:00:01       23 阅读
  5. 大数据面试题之Hudi(1)

    2024-07-12 02:00:01       18 阅读
  6. ES6 Iterator 与 for...of 循环(五)

    2024-07-12 02:00:01       23 阅读
  7. 对素数的一种新理解

    2024-07-12 02:00:01       21 阅读
  8. 力扣 454四数相加

    2024-07-12 02:00:01       20 阅读
  9. 十大排序算法(慢慢更新)

    2024-07-12 02:00:01       22 阅读
  10. 简谈设计模式之建造者模式

    2024-07-12 02:00:01       18 阅读
  11. 力扣题解(乘积最大子数组)

    2024-07-12 02:00:01       23 阅读
  12. synchronized (userAccount.intern())知识点

    2024-07-12 02:00:01       22 阅读
  13. 网络协议与标准

    2024-07-12 02:00:01       24 阅读
  14. Haproxy搭建Web群集

    2024-07-12 02:00:01       23 阅读