一天一个设计模式---单例模式

概念

单例模式是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这意味着在应用程序中的任何地方,只能有一个实例存在,而不会创建多个相同类型的实例。

具体内容

单例模式通常包括以下几个要素:

  1. 私有构造函数(Private Constructor): 单例类的构造函数必须是私有的,以防止通过外部代码创建多个实例。
  2. 私有静态变量(Private Static Variable): 单例类内部通常包含一个私有的静态变量,用于保存该类的唯一实例。
  3. 公有静态方法(Public Static Method): 单例类提供一个公有的静态方法,通常命名为 getInstance(),用于获取该类的唯一实例。这个方法负责创建实例(如果尚未创建),并返回该实例。
  4. 延迟实例化(Lazy Instantiation): 单例模式通常采用延迟实例化的方式,即在首次调用 getInstance() 方法时才创建实例。

类结构图

在这里插入图片描述

适用场景

单例模式的优点包括:

  • 全局访问点: 通过单例模式,可以在应用程序中的任何地方访问相同的实例,方便共享数据和功能。
  • 节省资源: 由于只有一个实例存在,可以节省系统资源,特别是对于需要频繁创建和销毁的对象。
  • 避免竞态条件: 单例模式可以避免多线程环境下的竞态条件,确保只有一个实例被创建。

单例模式的缺点包括:

  • 全局状态: 单例模式引入了全局状态,可能会导致程序的复杂性增加。
  • 难以扩展: 单例模式的实例是静态的,很难通过继承或接口实现进行扩展。

实现

class Singleton {
  // 私有静态变量,用于保存唯一实例
  static instance = null;

  // 私有构造函数,防止外部创建实例
  constructor() {
    if (!Singleton.instance) {
      Singleton.instance = this;
    }
    return Singleton.instance;
  }

  // 公有静态方法,获取唯一实例
  static getInstance() {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
}

// 客户端代码
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();

console.log(instance1 === instance2); // 输出: true,因为它们是同一个实例


相关推荐

  1. 设计模式(模式)

    2024-01-09 12:16:03       35 阅读
  2. 设计模式模式

    2024-01-09 12:16:03       26 阅读
  3. 系列设计模式

    2024-01-09 12:16:03       34 阅读
  4. 设计模式

    2024-01-09 12:16:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 12:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 12:16:03       18 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 12:16:03       17 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 12:16:03       20 阅读

热门阅读

  1. C++入门【24-C++ 传递指针给函数】

    2024-01-09 12:16:03       32 阅读
  2. 华纳云:Ubuntu上如何增加Swap分区?

    2024-01-09 12:16:03       35 阅读
  3. 连接oracle报:ora-28001:the password has expired

    2024-01-09 12:16:03       29 阅读
  4. leetcode每日一题43

    2024-01-09 12:16:03       39 阅读
  5. LeetCode——447. 回旋镖的数量

    2024-01-09 12:16:03       35 阅读