Pular para o conteúdo principal

Design Patterns

Conceito

Design Patterns são soluções reutilizáveis para problemas comuns que surgem durante o desenvolvimento de software. Eles não são código pronto, mas sim modelos ou templates que podem ser aplicados a diferentes situações para deixar o sistema mais organizado, flexível e manutenível. Os padrões de projeto têm como uma de suas funções principais facilitar a definição de interfaces comuns e promover o desacoplamento entre componentes do sistema.

"É uma forma comprovada de resolver um problema recorrente em projetos de software."

Objetivos principais:

Promover reuso de boas práticas.
Facilitar a manutenção e evolução do sistema.
Aumentar o nível de abstração e comunicação entre desenvolvedores.
Evitar reinvenção da roda.

Design Patterns

GoF significa Gang of Four (Gangue dos Quatro), apelido dado aos quatro autores do livro clássico.

Grupos de Design Patterns (GoF)

🏗️ 1. Padrões Criacionais

Objetivo: Abstraem e controlam o processo de criação de objetos, tornando o sistema mais flexível ao instanciar classes.

Principais padrões:

  • Singleton – Garante uma única instância de uma classe,e por isso pode ser difícil realizar testes unitários do código cliente do Singleton porque muitos frameworks de teste dependem de herança quando produzem objetos simulados.
  • Factory Method – Define uma interface para criar objetos, deixando as subclasses decidirem qual classe instanciar.
  • Abstract Factory – Cria famílias de objetos relacionados sem depender de suas classes concretas.
  • Builder – Separa a construção de um objeto complexo da sua representação.
  • Prototype – Permite copiar objetos existentes sem acoplamento ao código das classes.

🧱 2. Padrões Estruturais

Objetivo: Lidam com a composição de classes e objetos, facilitando a organização e a construção de estruturas maiores.

Principais padrões:

  • Adapter – Conecta interfaces Incompatíveis.
  • Bridge – Separa abstração da implementação, permitindo que evoluam separadamente.
  • Composite – Permite tratar objetos individuais e composições de objetos de forma uniforme.
  • DecoratorAdiciona responsabilidades a um objeto dinamicamente.
  • Facade – Fornece uma interface simplificada para um subsistema complexo.
  • Flyweight – Reduz o uso de memória ao compartilhar objetos semelhantes.
  • Proxy – Representa outro objeto para controlar o acesso a ele.

🔁 3. Padrões Comportamentais

Objetivo: Focados na comunicação entre objetos e na forma como os algoritmos são delegados ou trocados.

Principais padrões:

  • Observer – Permite que objetos sejam notificados quando outro objeto muda de estado.
  • Strategy – Permite a seleção de algoritmos em tempo de execução.
  • CommandEncapsula uma solicitação como um objeto. Determinam o encapsulamento de uma ação e seus respectivos parâmetros.
  • Iterator – Acessa elementos de uma coleção sequencialmente sem expor sua estrutura interna.
  • Mediator – Define um objeto central para encapsular a comunicação entre objetos.
  • State – Permite que um objeto altere seu comportamento quando seu estado interno muda.
  • Template Method – Define o esqueleto de um algoritmo, permitindo que subclasses alterem etapas específicas.
  • Chain of Responsibility – Evita o acoplamento entre o remetente e o receptor, passando a solicitação por uma cadeia.
  • Interpreter – Fornece uma forma de interpretar sentenças de uma linguagem.

Mnemônico

A fábrica (Factory Method) abstrata (Abstract Factory) constrói (Builder) um protótipo (Prototype) único (Singleton).

A ponte (Bridge) adaptada (Adapter) é composta (Composite) de decorações (Decorator) na fachada (Façade) para o peso-mosca (Flyweight) se aproximar (Proxy).

E não tem frase para o último? Não, porque não é necessária! Se não é um padrão criacional ou estrutural, é um padrão comportamental.