Sobes.tech
Middle+

Quais padrões de projeto são comuns em JavaScript e TypeScript que não existem em Java?

sobes.tech IA

Resposta da IA

  • Singleton (em JS/TS é mais facilmente implementado através de módulos e closures).
  • Module (padrão implícito da linguagem).
  • Prototype (através de herança prototípica).
  • Mixin (via Object.assign, classes ou funções de fábrica).
  • Padrão de módulo revelador (usando closures).
  • Função de fábrica (alternativa aos construtores de classes).
  • Injeção de dependências (mais frequentemente via fábricas ou contêineres, não tão dependente de anotações como em Java).

Exemplos de diferenças:

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

export default instance; // Exportação simples de uma única instância

Em Java, é necessário um método estático getInstance() e um construtor privado.

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

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

Em Java, é necessário declarar explicitamente classes e modificadores de acesso.

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

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

dog.speak(); // woof

Em Java, herança é baseada em classes.

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

Em Java, não há suporte nativo para mixins (usam-se interfaces ou composição).