什么是单例模式?
单例模式指的是一个类只有一个实例,且该实例易于被外界访问。
举个例子,一个班级只有一个班主任,所有学生都可以随时找到并访问该班主任。
单例模式在实现上有以下特点:
构造函数是私有的,外部无法直接实例化
提供一个静态的全局访问点,让外部直接访问该实例
首次访问时实例化自己,后续保持对同一实例的访问
代码实现:
js
class Singleton {
constructor() {
// 私有构造函数
}
static getInstance() {
// 全局访问点
if (!Singleton.instance) {
Singleton.instance = new Singleton()
}
return Singleton.instance
}
}
// 访问方式
let s1 = Singleton.getInstance()
let s2 = Singleton.getInstance() // 获取同一实例
单例模式的优点是:
节省内存,由于只实例化一次,减少资源消耗
避免命名冲突,实例作为全局访问点,无需考虑命名问题
观察者模式指的是一个对象(Subject)维护一系列依赖于它的观察者(Observer)对象,当这个Subject对象状态变更时,会通知所有观察者做出反应。
eg:
- 一个微信公众号是被观察者(Subject),它有很多订阅用户,当这个公众号发布了新文章,所有订阅用户都会从微信端收到通知,这就是一个观察者模式。
在实现上观察者模式分两个关键部分:
- Subject对象:拥有状态,使用attach、detach管理观察者,当状态变化时notify通知所有观察者。
- Observer对象:定义更新接口,接收来自Subject的更新通知,做出反应。
这样两个对象通过注册机制实现了松耦合关系,Subject不需要了解观察者细节,反之亦然。