Sobes.tech
Middle+

Jakie wzorce projektowe są powszechne w JavaScript i TypeScript, a nie występują w Java?

sobes.tech AI

Odpowiedź od AI

  • Singleton (w JS/TS łatwiejszy do implementacji dzięki modułom i zamknięciom).
  • Module (domyślny wzorzec języka).
  • Prototype (przez dziedziczenie prototypowe).
  • Mixin (przez Object.assign, klasy lub funkcje fabryczne).
  • Revealing Module Pattern (z użyciem zamknięć).
  • Factory Function (alternatywa dla konstruktorów klasowych).
  • Dependency Injection (częściej przez fabryki lub kontenery, nie tak mocno zależne od adnotacji jak w Java).

Przykłady różnic:

  • Singleton:
// singleton.js
const instance = {
  data: 'some data'
};

export default instance; // Prosty eksport pojedynczego egzemplarza

W Java potrzebna jest statyczna metoda getInstance() i prywatny konstruktor.

  • Module:
// module.js
const privateVar = 'private';

export function publicMethod() {
  console.log(privateVar);
}

W Java wymagana jest jawna deklaracja klas i modyfikatorów dostępu.

  • Prototype:
const animal = {
  speak() {
    console.log('...');
  }
};

const dog = Object.create(animal);
dog.speak = function() {
  console.log('woof');
};

dog.speak(); // woof

W Java dziedziczenie opiera się na klasach.

  • 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...

W Java nie ma natywnego wsparcia dla mixinów (używa się interfejsów lub kompozycji).