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.