Javascript中的设计模式有哪些?它们的作用是什么?

JavaScript 中常用的设计模式主要有以下几种:

  1. 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
const singleton = (function() {
  let instance;

  return {
    getInstance() {
      if (!instance) {
        instance = new Singleton();
      }
      return instance;
    }
  } 
})();
  1. 工厂模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
class Product {
  constructor(name) {
    this.name = name;
  }
}

class Factory {
  createProduct(name) {
    switch (name) {
      case 'a': 
        return new ProductA();
      case 'b': 
        return new ProductB();
    }
  }
}
  1. 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
class Subject {
  constructor() {
    this.observers = [];
  }

  addObserver(observer) {
    this.observers.push(observer);
  }

  notifyObservers() {
    this.observers.forEach(observer => {
      observer.update(); 
    });
  }
}

class Observer {
  update() {
    console.log(' Got update!');
  }
}
  1. 代理模式:为其他对象提供一种代理以控制访问这个对象。代理模式有许多应用,最常见的是控制对某个对象的访问权限或为对象创建缓存。
class HeavyObject {
  doSomething() { /* ... */ }
}

class Proxy {
  constructor() {
    this.heavy = new HeavyObject();
  }

  doSomething() { 
    if (!this.value) {
      this.value = this.heavy.doSomething();
    }
    return this.value; 
  }
}

设计模式的主要作用是:

  1. 代码复用:设计模式可以使设计更为清晰和解耦。
  2. 高内聚低耦合:减少模块之间的依赖关系。
  3. 提高系统的稳定性、可扩展性和可维护性。

所以,总结来说 JavaScript 中常用的设计模式主要有:

  1. 单例模式:保证一个类仅有一个实例。
  2. 工厂模式:定义一个创建对象的接口。
  3. 观察者模式:一对多的依赖关系。
  4. 代理模式:为其他对象提供一种代理以控制访问。