javascript 设计模式的综合整理
在JavaScript中,设计模式是用于解决特定原则和模式的编程问题的套路。
下面是几个常见的设计模式:
1. 工厂模式 2. 单例模式 3. 观察者模式 4. 策略模式
工厂模式
工厂模式是用来创建对象的一种方法,它把对象的创建过程封装起来,使得创建过程可以独立于客户端。
function createPerson(name, age) { let obj = {} obj.name = name obj.age = age return obj } let person1 = createPerson('Tom', 25)
单例模式
单例模式是一种只创建一个对象的方法。通过该方法,我们可以确保只有一个对象被创建,并且可以被全局范围内的对象所共享。
let Singleton = (function() { let _instance function createInstance() { let obj = {} // ... return obj } return { getInstance: function() { if(!_instance) _instance = createInstance() return _instance } } })() let instance1 = Singleton.getInstance() let instance2 = Singleton.getInstance() console.log(instance1 === instance2) // true
观察者模式
观察者模式是一种通知机制,通过该机制,一个被观察的对象可以在发生变化时通知依赖于该对象的其他对象。该模式被广泛应用于事件驱动系统中。
function Subject() { this.observers = [] } Subject.prototype = { subscribe: function(observer) { this.observers.push(observer) }, unsubscribe: function(observer) { const index = this.observers.indexOf(observer) if (index !== -1) { this.observers.splice(index, 1) } }, notify: function() { this.observers.forEach(observer => observer.update()) } } function Observer() { this.update = function() { // ... } } let subject = new Subject() let observer1 = new Observer() let observer2 = new Observer() subject.subscribe(observer1) subject.subscribe(observer2) subject.notify()
策略模式
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同。
const strategy = { 'add': function(a, b) { return a + b }, 'subtract': function(a, b) { return a - b } } function calculate(strategyName, a, b) { return strategy[strategyName](a, b) } console.log(calculate('add', 1, 2)) // 3 console.log(calculate('subtract', 1, 2)) // -1
以上是四种常见的设计模式,它们分别用来解决对象创建、全局单例、通知机制和算法选择的问题。