定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如vuex状态管理、浏览器window对象等,他们只会实例化一次,之后所有时间访问拿到的都是同一个对象。
1.代码实现
// 自定义命名空间,防止变量污染
const single_space = {
example1: {}
}
// 采用闭包方式,控制永久只创建一个实例
let getSingle = function (fn) {
let result = null
return function() {
return result || result = fn.apply(this, arguments)
}
}
// 加入我当前想实现,多次触发,但只创建一次div
let createDiv = function () {
let div = document.createElement('div')
div.innerHTML = '这是一个div'
div.style.display = none
document.body.append(div)
return div
}
let getInstance = getSingle(createDiv)
//后续多次调用getInstance方法,只会执行一次创建dom的操作,后续会取用已经创建好的dom
getInstance()
getInstance()
...