内容简介:系统中被唯一使用,一个类只有一个实例,实现方法一般是先判断实例是否存在,如果存在就返回,不存在就创建再返回。在JavaScript里,单例作为空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。模式作用:
系统中被唯一使用,一个类只有一个实例,实现方法一般是先判断实例是否存在,如果存在就返回,不存在就创建再返回。
在JavaScript里,单例作为空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
模式作用:
- 模块间通信
- 系统中某个类的对象只能存在一个
- 保护自己的属性和方法
注意事项:
- 注意this的使用
- 闭包容易造成内存泄漏,不需要的赶快干掉
- 注意new的成本
代码示例
java中的单例模式
java请类型可以私有化,外部new就会报错。
JavaScript中的单例模式
class SingleObject {
login() {
console.log('login')
}
}
// 利用闭包实现了私有变量
SingleObject.getInstance = (fucntion () {
let instance
return function () {
if (!instance) {
instance = new SingleObject()
}
return instance
}
})()
let obj1 = SingleObject.getInstance()
obj1.login()
let obj2 = SingleObject.getInstance()
obj2.login()
// 两者是否相等
console.log(obj1 === obj2)
// js弱类型,没有私有方法,使用者还是可以直接new 一个 SingleObject,也会有 login方法
console.log('------------分割线------------')
let obj3 = new SingleObject()
obj3.login()
console.log('obj1===obj3',obj1 === obj3) // false 不是单例
最简单的单例模式,就是对象。在 JavaScript 中 定义一个对象(Object),那么它的属性,就只能通过它自己调用。就算两个不同的对象,有相同的属性名,也不能相互调用,保护了自己属性。
登录框 单例
class LoginForm {
constructor() {
this.state = 'hide'
}
show() {
if (this.state === 'show') {
alert('已经显示')
return
}
this.state = 'show'
console.log('登录框已显示')
}
hide() {
if (this.state === 'hide') {
alert('已经隐藏')
return
}
this.state = 'hide'
console.log('登录框已隐藏')
}
}
LoginForm.getInstance = (function () {
let instance
return function () {
if (!instance) {
instance = new LoginForm();
}
return instance
}
})()
// 一个页面中调用登录框
let login1 = LoginForm.getInstance()
login1.show()
// login1.hide()
// 另一个页面中调用登录框
let login2 = LoginForm.getInstance()
login2.show()
// 两者是否相等
console.log('login1 === login2', login1 === login2)
最后
创建了一个前端学习交流群,感兴趣的朋友,一起来嗨呀!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Perl最佳实践
康韦 / Taiwan公司 / 东南大学出版社 / 2008-3 / 78.00元
《Perl最佳实践》中所有的规则都是为了写出清晰、健壮、高效、可维护和简洁的程序而设计。Conway博士并不自诩这些规则是最广泛和最清晰的实践集,但实际上,《Perl最佳实践》确实提供了在实践中被广泛认可和应用的建议,而不是象牙塔似的编程理论。许多程序员凭直觉来编程,这些直觉来自于他们早期养成的习惯和风格。这样写出的程序似乎自然、直观,而且看起来也很不错。但是,如果你想严肃地对待程序员这份职业,那......一起来看看 《Perl最佳实践》 这本书的介绍吧!