设计模式

8月20学习笔记

设计模式:

2.单例模式:

单例模式有以下特点:

  • 单例模式中,一个类只能有一个实例(必须是强相等===)。
  • 单例类必须创建自己的唯一实例,
  • 单例类必须给所以其他对象提供这一实例

####

业务场景?

应用于一些只存在一个的业务,例如弹窗,购物车等等。无论在单页面还是多页面中,这些场景业务只存在一个。使用单例模式来避免使用外部变量判定实例是否存在。

演示:

1.懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Model{
login(){
console.log('loging.....');
}
}
Model.create=(function(){
let instance;
return function(){
if(!instance){
instance=new Model();
}
return instance;
}
})();
let m1=Model.create();
let m2=Model.create();
console.log(m1===m2);//=>true

这里通过JavaScript的立即执行函数和闭包函数,确定初始实例,通过判定instance是否存在,若存在直接返回,否则创建后返回,确保一个类有且只有一个实例对象。

2.饿汉式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let Model =(function(){
let instance;
return function(name){
if(instance){
return instance;
}
this.name=name;
return instance=this;
}
})();
Model.prototype.getName=function(){
return this.name;
}
let question=new Model('问题');
let answer=new Model('答案');

console.log(question===answer);//=>true
console.log(question.getName());//=>true
console.log(answer.getName());//=>true

从上面代码结果可以看出,单例模式的实现实质是创建一个可以返回对象的实例的引用以及一个获取该实例的方法。并且保证创建的该实例的引用是唯一的。

应用场景?

在Vue中的Vuex和redux中的store