前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 - 单例模式 - JavaScript

设计模式 - 单例模式 - JavaScript

作者头像
心谭博客
发布2020-04-20 16:17:09
2600
发布2020-04-20 16:17:09
举报
文章被收录于专栏:YuanXinYuanXin

单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。

专注前端与算法的系列干货分享,转载请声明出处:原文链接: xxoo521.com

什么是单例模式?

单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。

单例模式用途

如果一个类负责连接数据库的线程池、日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。

代码实现

需要指明的是,以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。

python3 实现

代码语言:javascript
复制
class Singleton:
  # 将实例作为静态变量
  __instance = None

  @staticmethod
  def get_instance():
    if Singleton.__instance == None:
      # 如果没有初始化实例,则调用初始化函数
      # 为Singleton生成 instance 实例
      Singleton()
    return Singleton.__instance

  def __init__(self):
    if Singleton.__instance != None:
      raise Exception("请通过get_instance()获得实例")
    else:
      # 为Singleton生成 instance 实例
      Singleton.__instance = self

if __name__ == "__main__":

  s1 = Singleton.get_instance()
  s2 = Singleton.get_instance()

  # 查看内存地址是否相同
  print(id(s1) == id(s2))

javascript 实现

代码语言:javascript
复制
const Singleton = function() {};

Singleton.getInstance = (function() {
    // 由于es6没有静态类型,故闭包: 函数外部无法访问 instance
    let instance = null;
    return function() {
        // 检查是否存在实例
        if (!instance) {
            instance = new Singleton();
        }
        return instance;
    };
})();

let s1 = Singleton.getInstance();
let s2 = Singleton.getInstance();

console.log(s1 === s2);

扫码关注「心谭博客」, 专注前端与算法

目前已有前端面试、剑指Offer·JS、动画设计、Webpack等系列专题

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是单例模式?
  • 单例模式用途
  • 代码实现
    • python3 实现
      • javascript 实现
        • 扫码关注「心谭博客」, 专注前端与算法
          • 目前已有前端面试、剑指Offer·JS、动画设计、Webpack等系列专题
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档