javascript设计模式---单例模式

JavaScript设计模式---单例模式

单例模式又称为单体模式,并提供一个访问它的全局访问点,也就是说,第二次使用同一个类创建的对象的时候,应该得到和第一次创建的对象完全相同的对象

特点

  1. 一个类只能生成一个实例对象
  2. 提供一个全局访问点来获取这个实例

案例

  1. window和document
  2. Vuex,Redux和Router
  3. 全局loading

缺点

确保在整个应用中,只有一个实例存在,而且该实例需要被全局访问时。但是使用单例模式,因为可能会引入全局状态,增加代码的复杂度和耦合性

实现

  1. 构造函数
javascript 复制代码
let singleDemo;
function SingleDemo() {
  if (!singleDemo) {
    singleDemo = this;
  }
  return singleDemo;
}
SingleDemo.prototype.show = function () {
  console.log("我是单例模式");
};
const single1 = new SingleDemo();
const single2 = new SingleDemo();
console.log(single1 === single2);
  1. 使用类的静态属性
javascript 复制代码
class Singleton {
  static instance;
  constructor() {
    if (!Singleton.instance) {
      Singleton.instance = this;
    }
    return Singleton.instance;
  }
}
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true
  1. 闭包
javascript 复制代码
const Singleton = (function () {
  let instance;
  function createInstance() {
    // 实例化逻辑
    return {
      // 实例属性和方法
    };
  }
  return {
    getInstance: function () {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    },
  };
})();
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true

应用场景

  1. window和document全局变量,是单例
  2. es6中的module模块特性,通过import/export导出模块的变量是单例。
  3. Vuex维护的全局状态是单例的。

ps: 后续还会补充,在学习vuex和eventbus的区别的时候,想到这个模式,故学习了单例模式

相关推荐
zhanghaha131414 小时前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
李少兄20 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
码匠许师傅20 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
shmily麻瓜小菜鸡1 天前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
geovindu1 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
默_笙1 天前
🍕 AI 的嘴巴装了水管(上):从"等它说完"到"边说边听"的流式输出指南
前端·javascript
暖焰核心1 天前
继承全解——继承、默认成员函数、切片、隐藏与虚继承
java·前端·javascript
艾伦野鸽ggg1 天前
前端异步请求的状态竞争(请求竞态)问题
前端·javascript·axios
是立不是利1 天前
前端交互基石:深入剖析JavaScript三级联动背后的设计哲学
开发语言·前端·javascript
老刘的望远镜1 天前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
java·开发语言·javascript