JavaScript设计模式(单例模式)

定义:一个类仅有一个实例,并提供一个访问它的全局访问点html

 

实现思路:经过一个变量判断是否已经建立过对象了,若是是,直接返回此变量。app

 

 

基础实现

 

 1 /**
 2  * 单例模式基础实现
 3  * 缺点:没有透明化
 4  * @param {String} name 
 5  */
 6 var Singleton = function (name) {
 7     this.name = name
 8 }
 9 
10 Singleton.prototype.getName = function () {
11     console.log(this.name)
12 }
13 
14 Singleton.getInstance = function (name) {
15     var instance = null
16     return function (name) {
17         if (!instance) {
18             instance = new Singleton(name)
19         }
20         return instance
21     }
22 }
23 
24 var a = Singleton.getInstance('test1')

 

 

 

使用代理类实现单例模式

 

var CreateDiv = function (html) {
    this.html = html
    this.init()
}

CreateDiv.prototype.init = function () {
    var div = document.createElement('div')
    div.innerHTML = this.html
    document.body.appendChild(div)
}


// 使用代理实现单例模式

var ProxySingletonCreateDiv = (function () {
    var instance
    return function (html) {
        if (!instance) {
            instance = new CreateDiv(html)
        }

        return instance
    }
})()

var a = new ProxySingletonCreateDiv('test1')

 

 

惰性单例

在须要的时候才会建立实例,而且只建立一个实例this

 

/**
 * 
 * 建立对象和管理单例的职责要分开
 */
var getSingle = function (fn) {
    var result
    return function () {
        return result || (result = fn.apply(this, arguments))
    }
}

var createLoginLayer = function () {
    var div = document.createElement('div')
    div.innerHTML = '我是浮窗'
    div.style.display = 'none'
    document.body.appendChild(div)
    return div
}

var createSingleLoginLayer = getSingle(createLoginLayer)

 

 

参考spa

相关文章
相关标签/搜索