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

相關文章
相關標籤/搜索