Какие паттерны проектирования распространены в JavaScript и TypeScript, которые не встречаются в Java?

Singleton (в JS/TS реализуется проще за счет модулей и замыканий).

Короткий ответ

Что ответить на собеседовании

Singleton (в JS/TS реализуется проще за счет модулей и замыканий). Module (имплицитный паттерн языка). Prototype (за счет прототипного наследования). Mixin (через Object.assign, классы или фабричные функции). Revealing Module Pattern (с использованием замыканий). Factory Function (альтернатива конструкторам классов). Dependency Injection (чаще через фабрики или контейнеры, не так сильно завязано на аннотации как в Java).

Подробный разбор

Ответ с пояснениями

  • 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 нет нативной поддержки миксинов (используются интерфейсы или композиция).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее