Pular para o conteúdo principal

Padrão Abstract Factory

O Padrão Abstract Factory é um dos padrões criacionais que fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Este padrão é particularmente útil quando um sistema precisa ser independente de como seus produtos são criados, compostos e representados.

Quando usar o Padrão Abstract Factory?

  • Quando um sistema deve ser independente de como seus produtos são criados.
  • Quando você quer fornecer uma biblioteca de produtos e deseja revelar apenas suas interfaces, não suas implementações.
  • Quando você precisa garantir que produtos de uma mesma família sejam usados juntos.
  • Quando você quer trocar facilmente entre diferentes famílias de produtos.

Exemplo Prático em TypeScript

A seguir, veremos um exemplo de como o Padrão Abstract Factory pode ser implementado em TypeScript. Suponha que estamos desenvolvendo uma aplicação que precisa renderizar componentes de UI (botões e checkboxes) compatíveis com diferentes sistemas operacionais.

Implementação

src/design-patterns/abstract-factory.ts
loading...

Exemplo de uso

// Criando aplicação com tema Windows
const fabricaWindows = new FabricaWindows();
const appWindows = new Aplicacao(fabricaWindows);
console.log(appWindows.renderizar());
// Output: [Botão Windows] [✓ Checkbox Windows]

// Criando aplicação com tema macOS
const fabricaMac = new FabricaMacOS();
const appMac = new Aplicacao(fabricaMac);
console.log(appMac.renderizar());
// Output: ( Botão macOS ) ☑ Checkbox macOS

Neste exemplo, a Aplicacao não precisa saber qual sistema operacional está sendo usado. Ela simplesmente usa a fábrica abstrata para criar os componentes, e a fábrica concreta garante que todos os componentes sejam do mesmo "estilo" (Windows ou macOS).

Conclusão

O padrão Abstract Factory é ideal quando você precisa criar famílias de objetos relacionados que devem ser usados juntos. Ele garante consistência entre produtos criados e facilita a troca de famílias inteiras de produtos sem modificar o código cliente. É amplamente usado em toolkits de UI, temas de aplicações e sistemas que precisam suportar múltiplas plataformas.

Explore os demais padrões de projeto nesta seção para aprofundar seu conhecimento e aprimorar suas habilidades de desenvolvimento de software, com exemplos práticos em TypeScript!