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.
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.Decorator
– Adiciona 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.Command
– Encapsula 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.