单例模式和观察者模式

179 阅读1分钟

什么是单例模式?

单例模式指的是一个类只有一个实例,且该实例易于被外界访问。

举个例子,一个班级只有一个班主任,所有学生都可以随时找到并访问该班主任。

单例模式在实现上有以下特点:

构造函数是私有的,外部无法直接实例化
提供一个静态的全局访问点,让外部直接访问该实例
首次访问时实例化自己,后续保持对同一实例的访问
代码实现:

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不需要了解观察者细节,反之亦然。