JS_单例模式
- 什么是单例模式?
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 单例模式的优点
- 可以用来划分命名空间,减少全局变量的数量。
- 使用单体模式可以使代码组织的更为一致,使代码容易阅读和维护。
- 可以被实例化,且实例化一次。
- 主要思想
无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
接下来我们用JavaScript来强行实现这个思路,请看代码:
- 版本一
class Box {
a = 1;
constructor() {
}
static getInstance() {
return Box._instance || (Box._instance = new Box());
}
}
var b = Box.getInstance();
var b1 = Box.getInstance();
console.log(b === b1);//true
//Box._instance = 10;//缺点:虽然实现了,但是能够被修改
console.log(Box._instance);//打印10 Box._instance被暴露了
- 版本二
class Box {
a = 1;
constructor() {
}
static getInstance() {
if (!Box._instance) {
Object.defineProperty(Box, "_instance", { value: new Box() });
}
return Box._instance;
}
}
var b = Box.getInstance();
var b1 = Box.getInstance();
console.log(b === b1);//true
Box._instance = 10; //Box {a: 1}
console.log(Box._instance);//
- 版本三
class Box {
a = 1;
constructor() {
}
play() {
console.log("aaa");
}
static get instance() {
if (!Box._instance) {
Object.defineProperty(Box, "_instance", { value: new Box() });
}
return Box._instance;
}
}
Box.instance.play();//aaa
//通过设置get属性,只能读,不能写
只需要生成一个唯一对象的时候,比如说页面登录框,只可能有一个登录框,那么你就可以用单例的思想去实现他;
当然你不用单例的思想实现也行,那带来的结果可能就是你每次要显示登陆框的时候都要重新生成一个登录框并显示(耗费性能),或者是不小心显示出了两个登录框(等着吃项目经理的40米长刀吧)
网友评论