⚡
JavaScript Design Patterns
Advanced
140 XP
60 min
Lesson Content
JavaScript Design Patterns
Design patterns are reusable solutions to common programming problems. They help write maintainable, scalable code.
Module Pattern
const MyModule = (function() {
let privateVar = 0;
return {
increment: () => ++privateVar,
getValue: () => privateVar
};
})();Observer Pattern
class EventEmitter {
constructor() {
this.events = {};
}
on(event, callback) {
if (!this.events[event]) this.events[event] = [];
this.events[event].push(callback);
}
emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(cb => cb(data));
}
}
}Singleton Pattern
const Singleton = (function() {
let instance;
function createInstance() {
return { data: 'Singleton data' };
}
return {
getInstance: function() {
if (!instance) instance = createInstance();
return instance;
}
};
})();Factory Pattern
function createUser(type) {
if (type === 'admin') return new Admin();
if (type === 'user') return new User();
}Example Code
Implement common design patterns
// Observer Pattern
class EventEmitter {
constructor() {
this.events = {};
}
on(event, callback) {
if (!this.events[event]) this.events[event] = [];
this.events[event].push(callback);
}
emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(cb => cb(data));
}
}
}
const emitter = new EventEmitter();
emitter.on('message', (data) => console.log('Received:', data));
emitter.emit('message', 'Hello!');
// Module Pattern
const Counter = (function() {
let count = 0;
return {
increment: () => ++count,
getValue: () => count
};
})();
Counter.increment();
console.log('Count:', Counter.getValue());Expected Output:
Received: Hello! Count: 1
Study Tips
- •Read the theory content thoroughly before practicing
- •Review the example code to understand key concepts
- •Proceed to the Practice tab when you're ready to code