Sobes.tech
Junior — Middle

Explique as principais diferenças entre os padrões 'Método de Fábrica' e 'Fábrica Abstrata'.

sobes.tech IA

Resposta da IA

O padrão Método de Fábrica (Factory Method) define uma interface para criar um objeto, mas permite que as subclasses decidam qual classe instanciar. Ou seja, a criação de um objeto concreto é delegada às subclasses. Geralmente é usado quando há um produto e várias opções para sua implementação.

Fábrica Abstrata (Abstract Factory) fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. É um padrão de nível superior que combina vários métodos de fábrica para criar diferentes objetos relacionados.

Principais diferenças:

  • Foco: Método de Fábrica cria um produto, Fábrica Abstrata uma família de produtos.
  • Estrutura: Método de Fábrica geralmente é implementado por herança e sobrescrita do método de criação, Fábrica Abstrata por composição e um conjunto de interfaces.
  • Uso: Método de Fábrica é adequado quando se precisa criar objetos do mesmo tipo com variações, Fábrica Abstrata quando se precisa criar objetos relacionados de tipos diferentes que devem trabalhar juntos.

Exemplo em Dart (Flutter) para o método de fábrica:

abstract class Button {
  void render();
}

class AndroidButton implements Button {
  @override
  void render() => print('Botão Android');
}

class IOSButton implements Button {
  @override
  void render() => print('Botão iOS');
}

abstract class Dialog {
  Button createButton();
  void render() {
    var button = createButton();
    button.render();
  }
}

class AndroidDialog extends Dialog {
  @override
  Button createButton() => AndroidButton();
}

class IOSDialog extends Dialog {
  @override
  Button createButton() => IOSButton();
}

Aqui, Dialog é o método de fábrica que cria diferentes botões dependendo da plataforma.

A Fábrica Abstrata incluirá a criação de múltiplos produtos relacionados, por exemplo, botões e caixas de seleção, que devem ser compatíveis entre si.