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.

Entradas relacionadas: