1.单例模式
- 创建唯一实例
- 单例模式应用广泛,有些对象只需要创建一个,例如线程池,全局缓存,浏览器中的window对象等。
- 业务开发中,单例模式应用也十分广泛,例如处理页面弹窗时,点击按钮产生一个弹窗,如果多次点击,每次都会创建一个新的弹窗组件,十分消耗性能。
- 单例模式的核心思想是确保一个类只对应一个实例,每次调用构造函数时,返回指向同一个对象的指针,也就是说,我们只在第一次调用构造函数时,创建新对象,之后的所有调用,返回该对象即可。
- 核心思想:用变量进行缓存
1.1 ES5写法
var Singleton = function(name) {
this.name = name;
this.instance = null;
}
Singleton.prototype.getName = function() {
console.log(this.name);
}
Singleton.getInstance = function(name) {
if(!this.instance) {
this.instance = new Singleton(name);
}
return this.instance;
}
var a = Singleton.getInstance('a')
var b = Singleton.getInstance('b')
console.log(a, b, a=== b)
console.log(a.getName(), b.getName())
1.2 闭包写法
var user = (function() {
var name = 'user';
return {
getName: function() {
console.log(name);
return name;
}
}
})();
console.log(user.getName())
var ProxySingleton = (function() {
var __instance = null;
return function(Func) {
if(!__instance) {
__instance = new Func();
}
return __instance;
}
})();
function A() {
this.name = Math.random();
}
var a = new ProxySingleton(A);
var b = new ProxySingleton(A);
console.log(a, b, a === b)
2.观察者模式
- 观察者模式又叫发布订阅模式
- 定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知和更新
- 观察者模式提供了一个订阅模型,其中对象订阅事件,并在发生时得到通知,这种模式是事件驱动的编程基石
- 核心:全局队列,发生,触发队列
- 应用于异步场景,回调触发
3.代理模式
- 基于函数或者组件处理一些通用模式
- 为一个对象提供一个代用品或者占位符,以便来控制对他的访问
- 代理模式的关键是,当客户不方便直接访问一个对象,或者不满足需要的时候,提供一个提神对象来控制对这个对象的访问,客户实际上访问的是替身对象,替身对象对请求作出一些处理之后再把请求对象转交给本体对象