Mr. Panda
Tech For Fun

[JavaScript] JavaScript 设计模式之单例模式

简介

单例模式又叫单体模式,是设计模式中最常见的一种。单例模式是为了保证我们在创建对象的时候,始终使用的都是同一个对象实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

使用场景

  • 在整个应用中使用同一个对象实例

为什么使用

  • 防止对象被频繁创建,浪费内存。

如何使用

  • 实例私有化,只提供对外访问的方法。

代码案例

我们可以通过闭包保证实例是唯一且不可修改的。

闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。直观的说就是形成一个不销毁的栈环境。

class SDK {}
 const getSdk = (() => {
     let sdk = null;
     return () => {
         if(sdk === null) {
             sdk = new SDK();
         }
         return sdk;
     }
 })()
 const sdk1 = getSdk();
 const sdk2 = getSdk();
 console.log(sdk1 === sdk2);

执行结果:

>>> true

如果您使用了 ESM 和 TS,您也可以通过 ES 的模块化保证实例只可读取而不可更改,同时通过ts 的 private 关键字保证实例的私有。

class SDK {}
 class SDKWrapper{
     private sdk = null;
     constructor() {
         this.sdk = new SDK();
     }
     getSDK() {
         return sdk;
     }
 }
 const sdkWrapper = new SDKWrapper();
 const SdkInstance = sdkWrapper.getSDK();
 export default SdkInstance;

参考资料:

jonsam ng

jonsam ng

文章作者

海阔凭鱼跃,天高任鸟飞。

[JavaScript] JavaScript 设计模式之单例模式
简介 单例模式又叫单体模式,是设计模式中最常见的一种。单例模式是为了保证我们在创建对象的时候,始终使用的都是同一个对象实例。这种模式涉及到一个单一的类,该类负责创建自己的对…
扫描二维码继续阅读
2021-05-09