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.
Preciso de um único objeto compartilhado por toda a aplicação.
Problemas de estrutura
A biblioteca de terceiros não tem a interface que meu código espera.
Minhas classes se chamam RelatorioPDFMensalCompactado — é uma explosão combinatória.
Vivo escrevendo if (é grupo) percorre filhos; else usa item.
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.
Meu método salvar() também manda e-mail, atualiza cache, loga e chama webhook.
Cada componente da tela conhece todos os outros — mexer em um quebra três.
Toda semana preciso adicionar uma operação nova sobre as mesmas classes de domínio.
Meu cliente acessa a estrutura interna da coleção para percorrê-la.
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.