Design Patterns ‐ Introduction - cunhapaulo/ReferenceCard GitHub Wiki

Categories (structural and behavioural purpose)

One good reference

1. Creational Patterns

They focus on the object instantiation process, abstracting the creation process to make it more flexible and independent of the concrete application of the classes.

PATTERN DESCRIPTION
Singleton Garante que uma classe tenha uma única instância e fornece um ponto global de acesso a ela.
Factory Method Define uma interface para criar um objeto, mas permite às subclasses decidir qual classe instanciar.
Abstract Factory Fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas.
Builder Separa a construção de um objeto complexo da sua representação, permitindo a mesma construção com diferentes representações.
Prototype Cria novos objetos copiando um protótipo existente.

2. Padrões Estruturais (Structural Patterns)

Tratam da composição de classes e objetos para formar estruturas maiores e mais eficientes.

  • Adapter (Wrapper): Converte a interface de uma classe em outra esperada pelo cliente.
  • Bridge: Separa uma abstração de sua implementação para que ambas possam variar independentemente.
  • Composite: Compõe objetos em estruturas de árvore para representar hierarquias parte-todo.
  • Decorator: Adiciona responsabilidades a um objeto dinamicamente.
  • Facade: Fornece uma interface unificada para um conjunto de interfaces em um subsistema.
  • Flyweight: Usa o compartilhamento para suportar grandes quantidades de objetos de forma eficiente.
  • Proxy: Fornece um substituto ou representante de outro objeto para controlar o acesso a ele.

3. Padrões Comportamentais (Behavioral Patterns)

Lidam com a interação e responsabilidade entre objetos, promovendo a comunicação eficaz e desacoplada.

  • Chain of Responsibility: Evita o acoplamento do remetente de uma solicitação ao seu receptor, passando a solicitação por uma cadeia de objetos.
  • Command: Encapsula uma solicitação como um objeto, permitindo parametrizar clientes com diferentes solicitações.
  • Interpreter: Define uma gramática para uma linguagem e interpreta frases dessa linguagem.
  • Iterator: Fornece uma maneira de acessar os elementos de um agregado sequencialmente sem expor sua representação.
  • Mediator: Define um objeto que encapsula como um conjunto de objetos interage.
  • Memento: Captura e externaliza o estado interno de um objeto, sem violar o encapsulamento.
  • Observer: Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, seus dependentes são notificados.
  • State: Permite que um objeto altere seu comportamento quando seu estado interno muda.
  • Strategy: Define uma família de algoritmos, encapsula cada um e os torna intercambiáveis.
  • Template Method: Define o esqueleto de um algoritmo em uma operação, deixando alguns passos para as subclasses.
  • Visitor: Representa uma operação a ser realizada nos elementos de uma estrutura de objetos.

Considerações Filosóficas

Tais padrões refletem uma forma de areté técnica — excelência no agir projetual — em que se manifesta a "phronesis" (sabedoria prática), conforme Aristóteles a concebe na Ética a Nicômaco. Não se trata de meras receitas, mas de formas exemplares que exigem discernimento para serem aplicadas adequadamente no contexto singular de um sistema.

Ademais, a aplicação de padrões de projeto também remete à noção de forma platônica, uma ideia ideal de solução que o programador visa implementar no mundo sensível do código. Como afirma Christopher Alexander, cuja obra inspirou o conceito de design patterns na engenharia de software: “cada padrão descreve um problema que ocorre repetidamente em nosso ambiente, e então descreve o núcleo da solução para esse problema, de tal forma que você pode usar essa solução um milhão de vezes, sem nunca fazê-lo da mesma maneira duas vezes.” (A Pattern Language, 1977).


Referências

  • Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
  • Alexander, C. (1977). A Pattern Language: Towns, Buildings, Construction. Oxford University Press.
  • Freeman, E., Freeman, E., Sierra, K., & Bates, B. (2004). Head First Design Patterns. O'Reilly.