Pular para o conteúdo
GoF Padrões de Projeto Diagnóstico
Capítulo IIIentrada pela dor

Estou com este problema

A pergunta certa nunca é “qual padrão eu uso?”, e sim “que dor eu tenho?”. Procure abaixo o sintoma que se parece com o seu código.

Problemas de criação

Tenho new ClasseConcreta() espalhado pelo código e não consigo trocar a implementação.

Você precisa criar UM tipo de objeto ou uma FAMÍLIA inteira que precisa combinar?

Factory Method Criacional
Um produto, e a subclasse decide qual.
Abstract Factory Criacional
Uma família inteira que precisa ser coerente.
Prototype Criacional
Você já tem um objeto pronto e quer cópias dele.
Meu construtor tem 12 parâmetros e a maioria vem nula.

A montagem tem etapas ou é só configuração?

Builder Criacional
Sempre. É o caso de livro do Builder.
Prototype Criacional
Se as variações forem sempre a partir de um mesmo modelo base.
Preciso de um único objeto compartilhado por toda a aplicação.

É realmente único, ou você só quer acessá-lo de qualquer lugar?

Singleton Criacional
Se a unicidade for uma regra de verdade — mas prefira injeção de dependência.
Flyweight Estrutural
Se são muitos objetos que apenas repetem o mesmo conteúdo.

Problemas de estrutura

A biblioteca de terceiros não tem a interface que meu código espera.

Você quer traduzir, simplificar ou controlar o acesso?

Adapter Estrutural
Traduzir uma interface para outra.
Facade Estrutural
Simplificar um subsistema inteiro atrás de uma porta única.
Proxy Estrutural
Manter a interface e controlar acesso, cache ou carregamento.
Minhas classes se chamam RelatorioPDFMensalCompactado — é uma explosão combinatória.

As dimensões são estruturais e fixas, ou comportamentos que se empilham?

Bridge Estrutural
Duas dimensões independentes e estruturais (tipo × plataforma).
Decorator Estrutural
Comportamentos opcionais que se acumulam em camadas.
Strategy Comportamental
Só varia o algoritmo de uma operação.
Vivo escrevendo if (é grupo) percorre filhos; else usa item.

Sua estrutura é uma árvore?

Composite Estrutural
Sim — trate folha e nó com a mesma interface.
Iterator Comportamental
E extraia o percurso para um iterador.
Visitor Comportamental
E se as operações sobre a árvore mudam muito.
Tenho milhões de objetos parecidos e a memória estourou (já medi).

Boa parte do estado se repete entre eles?

Flyweight Estrutural
Separe o que é compartilhável do que é único.
Proxy Estrutural
Se o problema for carregar cedo demais objetos pesados.

Problemas de comportamento

Tenho um switch enorme repetido em vários métodos.

O switch é sobre COMO fazer algo, ou sobre em QUE FASE o objeto está?

Strategy Comportamental
Variações do mesmo algoritmo, escolhidas de fora.
State Comportamental
O comportamento muda conforme a fase do objeto, com transições.
Template Method Comportamental
A sequência é a mesma e só algumas etapas mudam.
Uma sequência de validações repetida em vários pontos, e a ordem precisa ser configurável.

Alguma etapa precisa poder interromper o fluxo?

Chain of Responsibility Comportamental
Sim — cada elo decide se segue ou barra.
Decorator Estrutural
Não — todos participam e enriquecem o resultado.
Preciso implementar desfazer/refazer.

O reverso é uma ação inversa ou uma restauração de estado?

Command Comportamental
A ação vira objeto, com executar() e desfazer().
Memento Comportamental
Você precisa fotografar o estado sem violar o encapsulamento.
Prototype Criacional
Se clonar o objeto inteiro for barato e suficiente.
Meu método salvar() também manda e-mail, atualiza cache, loga e chama webhook.

Os interessados são conhecidos e fixos, ou variam?

Observer Comportamental
Variam — publique um evento e deixe cada um se inscrever.
Mediator Comportamental
São muitos e se coordenam entre si.
Command Comportamental
As reações precisam ser enfileiradas ou repetidas.
Cada componente da tela conhece todos os outros — mexer em um quebra três.

A comunicação é bidirecional entre colegas?

Mediator Comportamental
Sim — centralize a coordenação num objeto só.
Observer Comportamental
Se o fluxo for de um para muitos, sem coordenação.
Facade Estrutural
Se o problema é acesso a um subsistema, não coordenação.
Toda semana preciso adicionar uma operação nova sobre as mesmas classes de domínio.

A hierarquia de classes é estável?

Visitor Comportamental
Sim — operações entram sem tocar nas classes.
Strategy Comportamental
Se for só uma operação com variantes.
Meu cliente acessa a estrutura interna da coleção para percorrê-la.

Você precisa de mais de uma forma de percurso?

Iterator Comportamental
Sempre — esconda a estrutura atrás de um iterador.
Composite Estrutural
Se a coleção for uma árvore.
Marketing quer mudar as regras de desconto sem esperar um deploy.

As regras têm uma gramática simples e combinável?

Interpreter Comportamental
Sim — cada regra vira uma classe que se avalia.
Strategy Comportamental
Se forem poucas variantes fechadas.
Composite Estrutural
Para compor regras E/OU em árvore.