单例模式

单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。常见应用场景包括模态框和Vuex状态管理,确保在整个应用程序中只存在一个特定组件或对象的实例。本文将探讨单例模式的概念、代码实现及其在实际开发中的应用。

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

什么是单例模式:简单理解为,多个引用指向一块内存。用到的例子:如模态框,vuex不管怎么声明。仅此只有一个实例对象。

单例模式代码:

// 第一种方式 静态属性方式
      class singleDog{
        instance = null

        static getInstance(){
          if(this.instance == null){
            this.instance = new singleDog();
          }
          return this.instance;
        }
      }
      let s1 = singleDog.getInstance();
      let s2 = singleDog.getInstance();
      console.log(s1 === s2);//true

 

// 第二种方式--闭包的方式
      class singleDog {

      }
      singleDog.getInstance = (function(){
        let instance = null;
        return function(){
          if(instance == null){
            instance = new singleDog();
          }
          return instance;
        }
      })();
      let s1 = singleDog.getInstance();
      let s2 = singleDog.getInstance();
      console.log(s1 === s2)

 例子:

/*  实现Storage,使得该对象为单例,基于 localStorage 进行封装。
      实现方法 setItem(key,value) 和 getItem(key)。 */
      class Storage{
        static init(){
          if(Storage.localStorage == null){
            Storage.localStorage = new Storage();
          }
        }
        setItem(key,value){
          this[key] = value;
          console.log(Storage.localStorage)
        }
        getTime(key){
          return  this[key];
        }
      }
      Storage.init();
      Storage.localStorage.setItem('key1','b');
      // 闭包实现
      /* 实现Storage,使得该对象为单例,基于 localStorage 进行封装。
      实现方法 setItem(key,value) 和 getItem(key)。 */

      function Storage(){
        
      }
      Storage.prototype.setItem = function(key,value){
        this[key] = value;
      }
      Storage.prototype.getItem = function(key){
        return this[key];
      }
      Storage.init = (function(){
        let instance = null;
        return function(){
          if(instance == null){
            instance = new Storage();
          }
          return instance;
        }
      })();

      let ins1 = Storage.init();
      ins1.setItem('key1','aaa');
      console.log(ins1.getItem('key1'));
      let ins2 = Storage.init();
      console.log(ins1 === ins2)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值