WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

JavaScript · Intermediate · question 37 of 100

What are some popular design patterns in JavaScript, and can you provide an example of one?

📕 Buy this interview preparation book: 100 JavaScript questions & answers — PDF + EPUB for $5

Design patterns are reusable solutions to common programming problems. In JavaScript, there are several popular design patterns that can be used to improve code quality, maintainability, and scalability. Here are some examples:

Singleton pattern: This pattern is used when you want to restrict the instantiation of a class to a single object. This can be useful when you want to ensure that only one instance of a class exists throughout your application. Here’s an example of how to implement the Singleton pattern in JavaScript:

    const Singleton = (function() {
        let instance;
        
        function createInstance() {
            const obj = new Object("I am the Singleton");
            return obj;
        }
        
        return {
            getInstance: function() {
                if (!instance) {
                    instance = createInstance();
                }
                return instance;
            }
        };
    })();
    
    const instance1 = Singleton.getInstance();
    const instance2 = Singleton.getInstance();
    
    console.log(instance1 === instance2); // Outputs true

In this example, the Singleton object is created as an immediately invoked function expression (IIFE) that returns an object with a getInstance() method. The getInstance() method checks if an instance of the Singleton class already exists and creates one if it doesn’t. The instance variable is a private variable that ensures only one instance of the Singleton class is created.

Observer pattern: This pattern is used when you want to create a one-to-many relationship between objects, where one object (the subject) notifies other objects (the observers) of any state changes. This can be useful in event-driven applications, where multiple components need to respond to user interactions or other events. Here’s an example of how to implement the Observer pattern in JavaScript:

    class Subject {
        constructor() {
            this.observers = [];
        }
        
        addObserver(observer) {
            this.observers.push(observer);
        }
        
        removeObserver(observer) {
            this.observers = this.observers.filter(obs => obs !== observer);
        }
        
        notify(data) {
            this.observers.forEach(observer => observer.update(data));
        }
    }
    
    class Observer {
        update(data) {
            console.log(`Received data: ${data}`);
        }
    }
    
    const subject = new Subject();
    const observer1 = new Observer();
    const observer2 = new Observer();
    
    subject.addObserver(observer1);
    subject.addObserver(observer2);
    
    subject.notify("Hello world!"); // Outputs "Received data: Hello world!" twice

In this example, the Subject class is responsible for maintaining a list of observers and notifying them of any state changes using the notify() method. The Observer class defines a update() method that is called when the observer is notified of a state change. The addObserver() and removeObserver() methods are used to manage the list of observers.

Factory pattern: This pattern is used when you want to create objects without exposing the creation logic to the client. This can be useful when you have a complex object that requires multiple steps to create, or when you want to create different types of objects based on a set of criteria. Here’s an example of how to implement the Factory pattern in JavaScript:

    class Car {
        constructor(make, model, year) {
            this.make = make;
            this.model = model;
            this.year = year;
        }
    }
    
    class CarFactory {
        static createCar(make, model, year) {
            return new Car(make, model, year);
        }
    }
    
    const car1 = CarFactory.createCar("Toyota", "Camry", 2022);
    const car2 = CarFactory.createCar("Honda", "Accord", 2023);
    
    console.log(car1); // Outputs Car { make: 'Toyota', model: 'Camry', year: 202
Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic JavaScript interview — then scores it.
📞 Practice JavaScript — free 15 min
📕 Buy this interview preparation book: 100 JavaScript questions & answers — PDF + EPUB for $5

All 100 JavaScript questions · All topics