单例模式的原则:确保只有一个实例,并提供全局访问
面向对象——用代理实现的单例模式
将 创建类的方法 和 管理类的逻辑 解耦。
const CreateDiv = function(html){
this.html = html
this.init()
}
CreateDiv.prototype.init = function(){
const div = document.createElement("div")
div.innerHtml = this.html
document.body.appendChild(div)
}
//引入代理类(代理模式)--利用闭包形成内部的instance变量,来确保只存在唯一实例
const ProxySingletonCreateDiv = (function(){
let instance
return function(html){
return instance || ( instance = new CreateDiv(html) )
}
})()
const a = new ProxySingletonCreateDiv("test")
JaveScript中的单例模式(单一职责原则)
//封装通用的管理单例的逻辑函数
const getSingle = function(fn){
let result
return function(){
return result || ( result = fn.apply(this,arguments) )
}
}
const createLoginLayer = function(){
const div = document.createElement("div")
div.innerHtml = "我是登录框"
document.body.appendChild(div)
return div
}
const createSingleLoginLayer = getSingle(createLoginLayer)