Padrões de Projeto — Resumo e Quando Usar
Classificado em Computação
Escrito em em
português com um tamanho de 4,14 KB
Resumo dos principais padrões de projeto (design patterns), com motivação, uso e exemplos práticos para facilitar a tomada de decisão na arquitetura de software.
Abstract Factory
Proporciona uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Quando utilizar
- O sistema deve ser configurado com uma de múltiplas famílias de produtos.
- Estes produtos relacionados são projetados para ser utilizados juntos, e você quer garantir essa restrição.
Exemplo
Montar uma interface gráfica para vários sistemas operacionais; família de componentes gráficos:
- Windows
- Linux
Builder
Separa a construção de um objeto complexo da sua representação, permitindo diferentes tipos de representação no mesmo processo.
Quando utilizar
- O algoritmo para criar um objeto deve ser independente de suas partes e de como elas são montadas.
- Dica: Abstract Factory enfatiza famílias de objetos; Builder constrói partes de objetos passo a passo.
Factory Method
Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar.
Quando utilizar
- Uma classe não pode antecipar a classe de objetos que ela deve criar.
- Uma classe quer que suas subclasses especifiquem os objetos que ela cria.
Exemplo
Escolha de sexo (Masculino/Feminino) durante a execução do programa, com resultados distintos para ambos os gêneros.
Prototype
Especifica os tipos de objetos a criar usando um protótipo (instância prototípica) e cria novos objetos copiando este protótipo (clonando o objeto original).
Quando utilizar
- O sistema possui componentes cujo estado inicial tem poucas variações.
- É conveniente disponibilizar um conjunto pré-estabelecido de protótipos que dão origem aos objetos que compõem o sistema.
Singleton
Garante que uma classe tem apenas uma instância e provê um ponto de acesso global a ela.
Quando utilizar
- Deve haver exatamente uma instância de uma classe, e ela deve ser acessível aos clientes a partir de um ponto de acesso conhecido.
Exemplo
Vários jobs de impressão, mas apenas um spooler que enfileira e coordena as impressões.
Adapter
Converte a interface de uma classe em outra interface com a qual normalmente não poderia trabalhar.
Quando utilizar
- Você quer utilizar uma classe existente, mas sua interface não é adequada à que você precisa.
Exemplo
Adaptar a utilização de uma API de terceiro a um software já implementado.
Bridge
Desacopla uma interface da sua implementação, de forma que elas possam variar independentemente.
Quando utilizar
- Você quer evitar um vínculo entre a abstração e a implementação.
- Mudanças na implementação não deveriam impactar os clientes — seu código não deveria ser recompilado.
Exemplo
API de desenho gráfico.
Composite
Compõe zero ou mais objetos similares de forma que possam ser manipulados como um só.
Quando utilizar
- Você quer representar hierarquias parte‑todo de objetos.
- Você quer que o cliente ignore a diferença entre objetos compostos e objetos individuais.
Exemplo
Árvores.
Decorator
Anexa responsabilidades adicionais a um objeto dinamicamente. Decoradores fornecem uma alternativa flexível à herança para estender funcionalidades.
Quando utilizar
- Ao querer adicionar responsabilidades a objetos dinamicamente.
- Quando a extensão por subclasses é impraticável.