JavaScript 中常用的设计模式主要有以下几种:
- 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
const singleton = (function() {
let instance;
return {
getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
}
})();
- 工厂模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
class Product {
constructor(name) {
this.name = name;
}
}
class Factory {
createProduct(name) {
switch (name) {
case 'a':
return new ProductA();
case 'b':
return new ProductB();
}
}
}
- 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
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!');
}
}
- 代理模式:为其他对象提供一种代理以控制访问这个对象。代理模式有许多应用,最常见的是控制对某个对象的访问权限或为对象创建缓存。
class HeavyObject {
doSomething() { /* ... */ }
}
class Proxy {
constructor() {
this.heavy = new HeavyObject();
}
doSomething() {
if (!this.value) {
this.value = this.heavy.doSomething();
}
return this.value;
}
}
设计模式的主要作用是:
- 代码复用:设计模式可以使设计更为清晰和解耦。
- 高内聚低耦合:减少模块之间的依赖关系。
- 提高系统的稳定性、可扩展性和可维护性。
所以,总结来说 JavaScript 中常用的设计模式主要有:
- 单例模式:保证一个类仅有一个实例。
- 工厂模式:定义一个创建对象的接口。
- 观察者模式:一对多的依赖关系。
- 代理模式:为其他对象提供一种代理以控制访问。