НовоеAI-конструктор резюме: правишь прямо на листе A4, а нейросеть подсказывает, что усилитьКонструктор резюме на листе A4Попробовать
JobPath
Начать бесплатно

FrontendSeniorТехнический

Расскажите о паттернах проектирования Singleton, Factory, Decorator и их применении

Встречался на собеседовании

  • EPAM

Ответ

Что хотят услышать интервьюеры

Интервьюеры ожидают от кандидата понимание паттернов проектирования, их определения и применения в реальных проектах. Важно продемонстрировать знание, как каждый паттерн решает конкретные проблемы, а также умение выбирать подходящий паттерн в зависимости от контекста задачи.

1. Singleton

Определение: Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

Применение:

  • Для управления доступом к общим ресурсам, например, к конфигурации приложения.
  • В ситуациях, когда важно иметь единый контроллер для работы с данными, например, в логгировании.

Пример:

class Singleton {
    constructor() {
        if (!Singleton.instance) {
            Singleton.instance = this;
        }
        return Singleton.instance;
    }

    getTimestamp() {
        return new Date();
    }
}

const instance1 = new Singleton();
const instance2 = new Singleton();

console.log(instance1 === instance2); // true, оба ссылаются на один экземпляр

2. Factory

Определение: Паттерн Factory предоставляет интерфейс для создания объектов в суперклассе, но позволяет подклассам изменять тип создаваемых объектов.

Применение:

  • Когда класс не знает, какие классы он должен создавать.
  • Для инкапсуляции создания объектов, например, в зависимости от типа данных.

Пример:

class Car {
    constructor(model) {
        this.model = model;
    }
}

class CarFactory {
    createCar(model) {
        return new Car(model);
    }
}

const factory = new CarFactory();
const myCar = factory.createCar('Tesla Model S');
console.log(myCar.model); // Tesla Model S

3. Decorator

Определение: Паттерн Decorator позволяет динамически добавлять функциональность объектам, оборачивая их в классы-декораторы.

Применение:

  • Когда необходимо добавлять обязанности объектам без изменения их структуры.
  • Для создания гибкой архитектуры, где можно комбинировать различные функциональности.

Пример:

class Coffee {
    cost() {
        return 5;
    }
}

class MilkDecorator {
    constructor(coffee) {
        this.coffee = coffee;
    }

    cost() {
        return this.coffee.cost() + 1;
    }
}

const myCoffee = new MilkDecorator(new Coffee());
console.log(myCoffee.cost()); // 6

Что могут спросить дальше

  • Объяснить, как выбрать подходящий паттерн для задач.
  • Привести примеры использования паттернов в известных проектах.
  • Показать, как паттерны могут взаимодействовать друг с другом.
  • Обсудить недостатки и ограничения каждого паттерна.
Ответ помог?
Тренироваться бесплатно

Связаться с поддержкой

Выбери, где удобнее написать