Padrões de Projeto - GoF
- Billy Joe Santos
- 7 de mai.
- 2 min de leitura
Na engenharia de software, escrever código que simplesmente funciona é apenas o primeiro passo de um processo muito mais complexo, no qual o verdadeiro desafio está em desenvolver soluções reutilizáveis, flexíveis e de fácil manutenção, capazes de evoluir com as mudanças de requisitos e tecnologias.
Nesse contexto, os padrões de projeto surgiram como estratégias consagradas para lidar com problemas recorrentes no desenvolvimento, oferecendo estruturas que promovem clareza, consistência e escalabilidade. Em 1994, quatro autores — Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a Gang of Four — consolidaram 23 desses padrões no influente livro Design Patterns: Elements of Reusable Object-Oriented Software, que rapidamente se tornou uma referência fundamental para arquitetos, engenheiros e desenvolvedores comprometidos com boas práticas de codificação.
Ao longo deste post, vou descrever, de forma geral, o que são esses padrões, como estão organizados em categorias e por que, mesmo após décadas de sua publicação, continuam a desempenhar um papel central na construção de sistemas robustos e bem estruturados.

Padrões Criacionais
Focam em mecanismos de criação de objetos, abstraindo o processo de instanciação.
Padrão | Objetivo |
Singleton | Garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso. |
Factory Method | Define uma interface para criar objetos, mas permite que subclasses decidam 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 depender de suas classes concretas. |
Padrões Estruturais
Tratam da composição de classes e objetos para formar estruturas maiores.
Padrão | Objetivo |
Adapter | Permite a colaboração entre interfaces incompatíveis. |
Bridge | Separa uma abstração da sua implementação, permitindo que evoluam separadamente. |
Composite | Compõe objetos em estruturas de árvore para representar hierarquias parte-todo. |
Decorator | Adiciona responsabilidades a um objeto dinamicamente. |
Facade | Fornece uma interface simplificada para um subsistema complexo. |
Flyweight | Compartilha objetos para economizar memória. |
Proxy | Controla o acesso a um objeto, podendo adicionar funcionalidades. |
Padrões Comportamentais
Focam na comunicação entre objetos e na atribuição de responsabilidades.
Padrão | Objetivo |
Chain of Responsibility | Evita acoplamento do remetente com o receptor ao passar a solicitação por uma cadeia de manipuladores. |
Command | Encapsula uma solicitação como um objeto. |
Interpreter | Implementa uma linguagem com uma gramática definida. |
Iterator | Fornece uma forma de acessar os elementos de uma coleção sequencialmente sem expor sua representação. |
Mediator | Define um objeto central para encapsular as interações entre objetos. |
Memento | Captura e restaura o estado interno de um objeto sem violar o encapsulamento. |
Observer | Permite que objetos sejam notificados quando o estado de outro objeto muda. |
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, permitindo que subclasses alterem etapas específicas. |
Visitor | Permite definir novas operações em uma estrutura de objetos sem alterar as classes. |
Nas próximas publicações iremos detalhar cada um dos padrões de projeto. Acompanhe!
留言