Ответ
Что хотят услышать интервьюеры
Интервьюеры ожидают от кандидата понимание паттернов проектирования, их определения и применения в реальных проектах. Важно продемонстрировать знание, как каждый паттерн решает конкретные проблемы, а также умение выбирать подходящий паттерн в зависимости от контекста задачи.
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 S3. 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Что могут спросить дальше
- Объяснить, как выбрать подходящий паттерн для задач.
- Привести примеры использования паттернов в известных проектах.
- Показать, как паттерны могут взаимодействовать друг с другом.
- Обсудить недостатки и ограничения каждого паттерна.