01单例模式

单例模式

单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池,全局缓存,获知浏览器中的window对象。在JavaScript开发中,单例模式的应用同样十分广泛。

1.1实现单例模式

要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经创建过对象,如果是则在下一次获取该类的实例时,直接返回之前创建的对象。代码如下:

var Singleton = function (name) {
   
    this.name = name
}
Singleton.instance = null
Singleton.prototype.getName = function () {
   
    return this.name
}
Singleton.getInstance = function (name) {
   
    if (!this.instance) {
   
        this.instance = new Singleton(name)
    }
    return this.instance
}
var a = Singleton.getInstance("xiao hong")
var b = Singleton.getInstance("xiao lv")

console.log(a.getName(), b.getName()) //xiaohong xiaohong
console.log(a === b)//true

或者

var Singleton = function (name) {
   
    this.name = name
}
Singleton.prototype.getName = function () {
   
    return this.name
}
Singleton.getInstance = (function () {
   
    var instance = null
    return function (name) {
   
        if (!this.instance) {
   
            this.instance = new Singleton(name)
        }
        return this.instance
    }
})()

var a = Singleton.getInstance("xiao hong")
var b = Singleton.getInstance("xiao lv")
console.log(a.getName(), b.getName())//xiaohong xiaohong	
console.log(a === b)//true

显然,我们是通过Singleton来获取Singleton类的唯一对象,这种方式相对来说比较简单,但有一个问题,就是增加了这个类的“不透明性”,Singleton类的使用者必须知道这是一个单例类,跟以往通过new XXX的方式来获取对象不同,这里偏要使用Singleton.getInstance来获取对象。

很显然上文中的代码还有很大的优化空间,我们下面蒋一步步写出更优雅的单例模式。

1.2透明的单例模式

我们现在的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值