Padrões de projeto (Design Patterns)
Do zero
Na construção civil, ninguém reinventa a escada a cada prédio: existem soluções conhecidas para problemas que se repetem. Em software também. Padrões de projeto são soluções reaproveitáveis para problemas comuns de projeto orientado a objetos, com nome, problema, solução e consequências.
O catálogo clássico é o do livro Design Patterns (1994), de Gamma, Helm, Johnson e Vlissides, a “Gangue dos Quatro” (GoF). São 23 padrões em três famílias, que respondem a três perguntas:
- Criacionais: como criar objetos sem amarrar o código a uma classe específica? (5 padrões)
- Estruturais: como encaixar classes e objetos para formar estruturas maiores? (7 padrões)
- Comportamentais: como os objetos se comunicam e dividem responsabilidades? (11 padrões)
Muitos padrões têm uma analogia do dia a dia. O Adapter é o adaptador de tomada: faz duas peças incompatíveis conversarem. O Observer é a assinatura de um canal: quando sai algo novo, todos os assinantes são avisados. O Decorator é o sorvete com coberturas: você acrescenta extras sem trocar o sorvete.
Frase para guardar: criacional cria, estrutural encaixa, comportamental coordena.
Em 1 minuto
- Criacionais (5): Abstract Factory, Builder, Factory Method, Prototype e Singleton.
- Estruturais (7): Adapter, Bridge, Composite, Decorator, Facade, Flyweight e Proxy.
- Comportamentais (11): Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor.
- Os mais cobrados: Singleton, Factory Method, Adapter, Facade, Decorator, Proxy, Observer e Strategy.
Exemplo concreto: o sistema de processos do Tribunal
| Problema no sistema | Padrão | Como resolve |
|---|---|---|
| Deve existir um único objeto de configuração, acessível de qualquer ponto | Singleton | Construtor privado e um método que devolve sempre a mesma instância |
| Integrar com o sistema legado de protocolo, cuja interface é diferente da esperada | Adapter | Uma classe intermediária traduz as chamadas de uma interface para a outra |
| Quando um processo muda de situação, avisar o painel, o e-mail e o log | Observer | O processo mantém uma lista de observadores e notifica todos a cada mudança |
| O cálculo da multa muda conforme o tipo de infração | Strategy | Cada regra de cálculo é uma classe com a mesma interface, trocável em tempo de execução |
| Acrescentar criptografia e compressão ao envio de arquivos, combinando à vontade | Decorator | Objetos que embrulham o original e acrescentam comportamento, sem subclasses para cada combinação |
| Oferecer uma chamada simples (“autuar processo”) que esconde cinco subsistemas | Facade | Uma interface simplificada para um conjunto complexo |
| Carregar o documento pesado só quando alguém abrir | Proxy | Um substituto controla o acesso ao objeto real (carga sob demanda, cache, permissão) |
Singleton em Java, como costuma aparecer na prova:
public class Configuracao {
private static Configuracao instancia; // a única instância
private Configuracao() { } // ninguém de fora usa "new"
public static synchronized Configuracao getInstancia() {
if (instancia == null) {
instancia = new Configuracao();
}
return instancia;
}
}
Comparação: os padrões que mais se confundem
| Par | Diferença |
|---|---|
| Adapter × Facade | Adapter converte uma interface em outra já esperada; Facade cria uma interface nova e mais simples para um subsistema inteiro |
| Decorator × Proxy | Decorator acrescenta comportamento; Proxy controla o acesso ao objeto (mesma interface, papel de guardião) |
| Strategy × State | Strategy: o cliente escolhe o algoritmo; State: o comportamento muda sozinho conforme o estado interno do objeto |
| Factory Method × Abstract Factory | Factory Method: uma subclasse decide qual objeto criar; Abstract Factory: cria famílias de objetos relacionados |
| Template Method × Strategy | Template Method usa herança (a subclasse redefine passos de um algoritmo fixo); Strategy usa composição (troca o algoritmo inteiro) |
| Composite | Trata objetos individuais e grupos da mesma forma (pastas que contêm arquivos e outras pastas) |
| Command | Transforma um pedido num objeto, permitindo fila, registro e desfazer |
| Builder | Monta um objeto complexo passo a passo |
| Prototype | Cria objetos clonando um modelo |
| Chain of Responsibility | Passa o pedido por uma cadeia até alguém tratá-lo (aprovações em alçadas) |
| Iterator | Percorre uma coleção sem expor a sua estrutura interna |
Como a FCC cobra
A descrição de um problema e a pergunta “qual padrão resolve?”, ou a classificação de um padrão em criacional, estrutural ou comportamental.
- Família de cada padrão (Singleton é criacional; Adapter, estrutural; Observer, comportamental).
- Reconhecer o padrão pelo cenário.
- Diferenças entre pares parecidos (Adapter × Facade, Decorator × Proxy, Strategy × State).
- Estrutura do Singleton (construtor privado, método estático).
Pegadinhas
- “O Singleton é um padrão estrutural.” Falso: é criacional.
- “O Observer é um padrão estrutural.” Falso: é comportamental.
- “Facade e Adapter são o mesmo padrão.” Falso: Adapter converte uma interface existente; Facade simplifica um subsistema.
- “O Decorator acrescenta comportamento por herança.” Falso: por composição, embrulhando o objeto, o que evita uma subclasse por combinação.
- “O GoF tem 23 padrões criacionais.” Falso: são 23 no total (5 criacionais, 7 estruturais e 11 comportamentais).
Explique com suas palavras
Explique a um colega iniciante o que é um padrão de projeto e dê dois exemplos com analogias do dia a dia, dizendo a família de cada um.
- Escreva sem olhar a lição, com frases curtas e um exemplo seu.
- Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
- Compare com a explicação-modelo e reescreva o que faltou.
Fica salva neste navegador.
Comparar com uma explicação-modelo
Padrão de projeto é uma solução já testada para um problema que se repete no desenho de um software. Em vez de inventar do zero, o programador usa uma receita conhecida, e todos da equipe entendem pelo nome.
O Adapter é como o adaptador de tomada: o aparelho tem um plugue e a parede tem outro formato, e o adaptador faz os dois funcionarem juntos sem mudar nenhum deles. É estrutural, porque trata de encaixar peças. O Observer é como seguir um canal: quando sai um vídeo novo, todos os seguidores são avisados, sem que o canal precise conhecer os detalhes de cada seguidor: ele só guarda a lista e avisa todos. É comportamental, porque trata de como os objetos se comunicam.
Teste-se
Engenharia de Software · Padrões de projeto · Inédita, estilo FCC
Questão 1 de 3
No catálogo de padrões de projeto do GoF, os padrões Singleton, Adapter e Observer são classificados, respectivamente, como
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Engenharia de Software · Padrões de projeto · Inédita, estilo FCC
Questão 2 de 3
O novo sistema de processos precisa usar um componente legado de protocolo cuja interface é incompatível com a que o sistema espera. Sem alterar o componente legado, a equipe criou uma classe intermediária que recebe as chamadas no formato esperado e as converte para o formato do legado. Foi aplicado o padrão
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Engenharia de Software · Padrões de projeto · Inédita, estilo FCC
Questão 3 de 3
Quando um processo muda de situação, vários componentes precisam ser atualizados automaticamente: o painel de acompanhamento, o serviço de e-mail e o registro de auditoria. O processo não deve depender das classes concretas desses componentes. O padrão mais adequado é o
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Mais duas questões deste tópico estão em Questões.
Flashcards gerados
| Frente | Verso |
|---|---|
| Singleton | Criacional. Garante uma única instância da classe e um ponto de acesso global a ela. Exemplo: Construtor privado e método estático getInstancia(). |
| Adapter × Facade | Adapter converte uma interface em outra já esperada; Facade cria uma interface simples para um subsistema complexo. |
| Factory Method × Abstract Factory | No Factory Method, uma subclasse decide qual objeto criar; a Abstract Factory cria famílias de objetos relacionados. |
| Composite | Estrutural. Trata objetos individuais e composições da mesma forma, numa árvore parte-todo. Exemplo: Pastas que contêm arquivos e outras pastas. |
| Command | Comportamental. Encapsula um pedido num objeto, permitindo fila, registro e desfazer. |
Ligação com o estudo de caso
Num caso de integração com sistemas legados de prefeituras, o Adapter é a resposta natural (“uma camada de adaptação converte o formato de cada prefeitura para o formato da API do Tribunal”). Para notificações de mudança de situação, cite o Observer, ou a versão distribuída dele, a arquitetura orientada a eventos.
Fontes da lição
- Edital nº 01/2026, Anexo II, Engenharia de Software (fontes/edital-01-2026.txt).
- Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, Padrões de projeto: soluções reutilizáveis de software orientado a objetos (catálogo dos 23 padrões e suas famílias).
Claude explica
Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.
Pratique fora do site
Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.