JavaScript 设计模式:全面概述
JavaScript 设计模式:全面概述
设计模式是针对常见编程问题的预定义解决方案。它们可帮助开发人员编写更有条理、更易于维护和可扩展的代码。在 JavaScript 中,这些模式可大致分为**创建型**、**结构型**和**行为型**模式。
1.创建型设计模式
创建模式专注于对象创建。它们确保实例化对象时的灵活性和重用性。
a)单例模式
确保类只存在一个实例,并为其提供全局访问点。
class Singleton { constructor() { if (Singleton.instance) return Singleton.instance; Singleton.instance = this; } } const instance1 = new Singleton(); const instance2 = new Singleton(); console.log(instance1 === instance2); // true
b)工厂模式
提供一种无需指定其确切类别即可创建对象的方法。
class CarFactory { static createCar(type) { switch (type) { case 'sedan': return { type: 'Sedan', wheels: 4 }; case 'suv': return { type: 'SUV', wheels: 4 }; default: return { type: 'Unknown', wheels: 0 }; } } } const car = CarFactory.createCar('suv'); console.log(car); // { type: 'SUV', wheels: 4 }
2.结构设计模式
结构模式处理对象的组成和关系,确保系统易于管理。
a)模块模式
将代码封装在一个独立的单元中,仅公开必要的方法。
const calculator = (() => { const add = (a, b) => a + b; const subtract = (a, b) => a - b; return { add, subtract }; })(); console.log(calculator.add(2, 3)); // 5 console.log(calculator.subtract(5, 2)); // 3
b)装饰器模式
动态地向对象添加附加行为。
function coffee() { return "Coffee"; } function withMilk(coffeeFn) { return `${coffeeFn()} + Milk`; } console.log(withMilk(coffee)); // Coffee + Milk
3.行为设计模式
行为模式关注对象如何交流和交互。
a)观察者模式
允许一个对象(主体)通知多个观察者其状态的变化。
class Subject { constructor() { this.observers = []; } subscribe(observer) { this.observers.push(observer); } notify(data) { this.observers.forEach(observer => observer(data)); } } const subject = new Subject(); subject.subscribe(data => console.log(`Observer 1: ${data}`)); subject.notify("Event occurred!"); // Observer 1: Event occurred!
b)策略模式
可以交替使用多种算法。
class PaymentStrategy { pay(amount) { throw new Error("This method must be overridden!"); } } class CreditCardPayment extends PaymentStrategy { pay(amount) { console.log(`Paid ${amount} using Credit Card`); } } const payment = new CreditCardPayment(); payment.pay(100); // Paid 100 using Credit Card
4. JavaScript 中的设计模式的好处
5. 关键要点
设计模式是制作强大且可扩展的 JavaScript 应用程序的必备工具。无论是创建对象、管理关系还是协调行为,这些模式都能为解决软件开发中的复杂挑战提供清晰的思路和方向。|