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