zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

125. 什么是单例模式? #182

Open zlx362211854 opened 4 years ago

goldEli commented 4 years ago

单例模式是为了避免类被多次实例化,只允许被实例化一次。

以 jQuery 为例,当你引人 $ 时会为你创建一个实例并返回,当你第二次引入 $,会检测实例化对象是否存在,如果存在就返回给你相同的实例,简单实现如下:

const Singleton = (function() {
  let instance
  function createInstance() {
    return new Object() 
  }
  return {
    getInstance: () => {
      if (!instance) {
        instance = createInstance()
      }
      return instance 
    }
  }
})()

const instance1 = Singleton.getInstance()
const instance2 = Singleton.getInstance()
console.log("same instance?", instance1 === instance2) // true

Reference

Singleton

zlx362211854 commented 4 years ago

单例模式是软件设计模式中的一种,最大的作用就是通过单例模式可以保证系统中一个类只有一个实例,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。举个例子: 我们在全局创建了一个生成config的方法,便于在其他地方使用

function Config(){
  // 如果已存在实例,则直接返回实例
 if(typeof Config.instance === 'object'){
     return Config.instance
 }
  // 实例属性
  this.config = {
    baseUrl: 'xxx',
    proxy: 'xxx'
  }
 //不存在实例则创建实例
 Config.instance =this
 return this
}
window.Config = Config

var c1 = new Config()
var c2 = new Config()
console.log(c1, c2, c1 === c2)
// true

这个时候,Config方法只会 生成一个实例,这样即便我们在全局有很多地方new了Config方法,也只会生成一个实例,这样保证了数据的一致性,也减少了资源的浪费。