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

本文介绍了单例设计模式的概念及其实现方法,包括使用ES6 Proxy和闭包方式,并探讨了其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最常见的单例Singleton设计模式,保证系统中的每一个类在任何情况实例化时候获得的都是同一个实例。 例如:

    let l1 = new Parent()
    let l2 = new Parent()
    l1 === l2 // true
复制代码

JavaScript最常见实现单例模式有一下两种方法:

  1. 通过 ES6 中 proxy 代理 construct 构造函数

     const singletonify = (Origin) => {
         let temp = new Origin
         return new Proxy(Origin, {
             construct: function(target, args, newTarget) {
                 return temp
             }
         })
     }
     //ps: ES6中proxy真的是神器,不仅可以替代Object.defineProperty来代理getter setter,还可以代理构造函数,apply函数执行等等方法)
    复制代码
  2. 通过闭包实现

     class Singleton {
         constructor() {}
     }
     Singleton.instance = () => {
         let singleInstance
         return () => {
             if(!singleInstance) {
                 singleInstance = new Singleton()
             }
             return singleInstance
         }
     }
    复制代码

单例设计模式优点:

1. 确保全局唯一只有一个实例;
2. 可以节约系统内存资源,由于内存中只存在单例一个对象实例,当在系统频繁创建删除对象时,可以极大节省内存;
3. 避免重复创建共享资源,避免了对共享资源的重复占用。
复制代码

单例设计模式缺点:

1. 不能保存彼此对象实例状态;
2. 对单例对象的扩展很难,只能用于全局共享资源等场景。
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值