Singleton (в JS/TS реализуется проще за счет модулей и замыканий). Module (имплицитный паттерн языка). Prototype (за счет прототипного наследования). Mixin (через Object.assign, классы или фабричные функции). Revealing Module Pattern (с использованием замыканий). Factory Function (альтернатива конструкторам классов). Dependency Injection (чаще через фабрики или контейнеры, не так сильно завязано на аннотации как в Java).
Какие паттерны проектирования распространены в JavaScript и TypeScript, которые не встречаются в Java?
Singleton (в JS/TS реализуется проще за счет модулей и замыканий).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
- Singleton (в JS/TS реализуется проще за счет модулей и замыканий).
- Module (имплицитный паттерн языка).
- Prototype (за счет прототипного наследования).
- Mixin (через Object.assign, классы или фабричные функции).
- Revealing Module Pattern (с использованием замыканий).
- Factory Function (альтернатива конструкторам классов).
- Dependency Injection (чаще через фабрики или контейнеры, не так сильно завязано на аннотации как в Java).
Примеры отличий:
- Singleton:
// singleton.js
const instance = {
data: 'some data'
};
export default instance; // Простой экспорт единственного экземпляра
В Java нужен статический метод getInstance() и приватный конструктор.
- Module:
// module.js
const privateVar = 'private';
export function publicMethod() {
console.log(privateVar);
}
В Java требуется явное объявление классов и модификаторов доступа.
- Prototype:
const animal = {
speak() {
console.log('...');
}
};
const dog = Object.create(animal);
dog.speak = function() {
console.log('woof');
};
dog.speak(); // woof
В Java наследование основано на классах.
- Mixin:
const searchable = {
search() {
console.log('Searching...');
}
};
class Article {
constructor(title) {
this.title = title;
}
}
Object.assign(Article.prototype, searchable);
const myArticle = new Article('Hello');
myArticle.search(); // Searching...
В Java нет нативной поддержки миксинов (используются интерфейсы или композиция).