首页 > 编程语言 > 详细

JavaScript设计模式(单例模式)

时间:2019-11-03 23:42:27      阅读:90      评论:0      收藏:0      [点我收藏+]

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

 

实现思路:通过一个变量判断是否已经创建过对象了,如果是,直接返回此变量。

 

 

基础实现

 

 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‘)

 

 

惰性单例

在需要的时候才会创建实例,并且只创建一个实例

 

/**
 * 
 * 创建对象和管理单例的职责要分开
 */
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)

 

 

参考

 

JavaScript设计模式(单例模式)

原文:https://www.cnblogs.com/leftear-LH/p/11789487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!