Padrões de Projeto: Singleton, Factory Method e Abstract Factory

Classificado em Formação e Orientação para o Emprego

Escrito em em português com um tamanho de 2,87 KB

Padrão Singleton

Objetivo: Garantir que uma classe possua somente uma instância e prover um ponto de acesso global a essa instância.

Por que utilizar? Algumas aplicações têm a necessidade de controlar o número de instâncias criadas de algumas classes.

Consequências:

  • A própria classe controla o acesso à sua instância única.
  • Não há necessidade de variáveis globais: zero poluição do espaço de nomes.
  • Permite extensão e refinamento: subclasses e permite número variado de instâncias.

Padrão Factory Method

Objetivo: Definir uma interface para criar objetos de forma a deixar subclasses decidirem qual classe instanciar.

Motivação:

  • Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar.
  • Quando uma classe quer que suas subclasses especifiquem os objetos criados.
  • Quando classes delegam responsabilidade para uma entre várias subclasses de apoio e queremos localizar num ponto único o conhecimento de qual subclasse está sendo usada.

Consequências:

  • Baixo acoplamento.
  • Maior flexibilidade.
  • Elimina a necessidade de acoplar classes específicas para aplicação em nível de código.
  • Alto número de classes, podendo sobrecarregar o sistema.

Padrão Abstract Factory

Objetivo: Permite a criação de famílias de objetos relacionados ou dependentes por meio de uma única interface e sem que a classe concreta seja especificada.

Motivação:

  • Quando necessitamos trocar implementações concretas sem alterar o código que estas usam, mesmo em tempo de execução.
  • Múltiplas interfaces.
  • Facilita a adição ou remoção de um tipo de interface, ou de um conjunto de objetos.

Consequências:

  • O padrão isola classes concretas.
  • Facilita o câmbio de famílias de produtos.
  • Promove a consistência entre produtos.
  • Do lado negativo: dar suporte a novos tipos de produtos é difícil.

Factory Method x Abstract Factory

Factory Method (FM) é usado para criar um produto (objeto), enquanto Abstract Factory (AF) é responsável por instanciar famílias de objetos relacionados/dependentes.

FM expõe o método de fábrica para o cliente criar o objeto, enquanto AF expõe a fábrica que instancia a família de objetos.

FM esconde a construção de um único objeto, enquanto AF esconde a construção de uma família de objetos relacionados.

Normalmente o padrão AF é implementado usando um conjunto de Factory Methods.

Entradas relacionadas: