Trilha de estudo
Trilha Padrões de Design: tudo o que estudar, tópico por tópico
Padrões de design e arquitetura de software
Resposta curta
Para aprender Padrões de Design, percorra 5 módulos e 24 tópicos na ordem em que um apoia o próximo. Comece por Padrões Criacionais e siga para Padrões Estruturais e Padrões Comportamentais. Use o mapa como checklist, ou meça seu nível e estude só o que falta.
O que você vai estudar
Os tópicos estão agrupados por módulo. Abra um para ver os objetivos e os conceitos-chave.
1 · Padrões Criacionais5 tópicos
Padrão Singleton
Garantir que uma classe tenha apenas uma instância e fornecer um ponto de acesso global. Aborda questões de thread-safety, inicialização lazy vs. eager e os trade-offs de testabilidade.
Objetivos
- Implementar um Singleton thread-safe na sua linguagem principal
- Argumentar quando o Singleton é apropriado e quando ele cria problemas
Conceitos-chave
- garantia de instância única
- ponto de acesso global
- inicialização thread-safe
- inicialização lazy
- inicialização eager
- double-checked locking
- questões de testabilidade
Padrão Factory Method
Definir uma interface para criar objetos, mas deixando que as subclasses decidam quais classes instanciar. Promove baixo acoplamento e o princípio Aberto/Fechado.
Objetivos
- Implementar o Factory Method para desacoplar a criação de objetos do seu uso
- Distinguir Factory Method de Simple Factory e Abstract Factory
Conceitos-chave
- classe criadora
- criador concreto
- interface de produto
- produto concreto
- princípio Aberto/Fechado
- responsabilidade da subclasse
- baixo acoplamento
Padrão Abstract Factory
Fornecer uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Útil para componentes de UI independentes de plataforma e famílias de produtos.
Objetivos
- Projetar uma Abstract Factory para uma biblioteca de UI multiplataforma
- Identificar quando a Abstract Factory agrega valor e quando o Factory Method é suficiente
Conceitos-chave
- família de produtos
- interface de abstract factory
- fábrica concreta
- variantes de produto
- consistência entre produtos
- padrão kit
Padrão Builder
Separar a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção crie diferentes representações.
Objetivos
- Substituir um telescoping constructor por um Builder
- Implementar um Builder fluente para um objeto de configuração complexo
Conceitos-chave
- construção passo a passo
- classe diretora
- builder concreto
- interface fluente
- objetos imutáveis
- problema do telescoping constructor
- encadeamento de métodos
Padrão Prototype
Criar novos objetos copiando um objeto existente (o protótipo). Aborda a semântica de shallow copy vs. deep copy, registros de clones e implicações de desempenho.
Objetivos
- Implementar corretamente deep copy para um grafo de objetos
- Escolher entre shallow copy e deep copy com base nos relacionamentos entre objetos
Conceitos-chave
- método clone
- shallow copy
- deep copy
- registro de protótipos
- construtor de cópia
- clonagem baseada em serialização
- semântica de cópia
2 · Padrões Estruturais7 tópicos
Padrão Adapter
Converter a interface de uma classe em outra interface esperada pelos clientes. Aborda class adapters (herança) vs. object adapters (composição) e cenários de integração.
Objetivos
- Implementar um object Adapter para integrar uma biblioteca de terceiros
- Escolher entre as abordagens de class adapter e object adapter, justificando a decisão
Conceitos-chave
- interface alvo
- adaptee
- class adapter
- object adapter
- incompatibilidade de interface
- integração com sistemas legados
- padrão wrapper
Padrão Bridge
Desacoplar uma abstração de sua implementação para que ambas possam variar de forma independente. Evita a explosão combinatória de subclasses.
Objetivos
- Refatorar uma explosão de hierarquia de classes em uma estrutura Bridge
- Explicar quando o Bridge supera hierarquias de herança profundas
Conceitos-chave
- hierarquia de abstração
- hierarquia de implementação
- desacoplamento
- composição em vez de herança
- dimensões ortogonais
- independência de plataforma
Padrão Composite
Compor objetos em estruturas de árvore para representar hierarquias parte-todo. Permite que os clientes tratem objetos individuais e composições de forma uniforme.
Objetivos
- Modelar um sistema de arquivos ou uma hierarquia de widgets de UI usando Composite
- Implementar operações recursivas que funcionem de forma uniforme em folhas e compostos
Conceitos-chave
- interface de componente
- nó folha
- nó composto
- estrutura de árvore
- composição recursiva
- tratamento uniforme
- hierarquia parte-todo
Padrão Decorator
Atribuir responsabilidades adicionais a um objeto de forma dinâmica. Fornece uma alternativa flexível à criação de subclasses para estender funcionalidades.
Objetivos
- Implementar uma cadeia de Decorators para aprimorar streams de E/S
- Distinguir o Decorator da extensão baseada em herança
Conceitos-chave
- interface de componente
- componente concreto
- decorator base
- decorator concreto
- encapsulamento (wrapping)
- extensão dinâmica
- responsabilidade única
Padrão Facade
Fornecer uma interface simplificada para um subsistema complexo. Reduz dependências de componentes internos e promove a Lei de Demeter.
Objetivos
- Projetar uma Facade sobre um subsistema complexo de codificação de vídeo
- Identificar quando uma Facade reduz o acoplamento e quando ela apenas esconde complexidade necessária
Conceitos-chave
- interface simplificada
- classes do subsistema
- desacoplamento do cliente
- Lei de Demeter
- arquitetura em camadas
- redução da superfície de API
Padrão Flyweight
Usar compartilhamento para suportar de forma eficiente um grande número de objetos de granularidade fina. Separa o estado intrínseco (compartilhado) do estado extrínseco (específico do contexto).
Objetivos
- Separar estado intrínseco de estado extrínseco em um sistema de renderização de caracteres
- Quantificar a economia de memória do Flyweight em comparação com a instanciação ingênua
Conceitos-chave
- estado intrínseco
- estado extrínseco
- fábrica de flyweights
- compartilhamento de objetos
- otimização de memória
- imutabilidade
- objetos de contexto
Padrão Proxy
Fornecer um substituto ou representante para outro objeto. Aborda virtual proxies (carregamento lazy), protection proxies (controle de acesso) e remote proxies (RPC).
Objetivos
- Implementar um virtual proxy para carregamento lazy de um recurso custoso
- Distinguir o Proxy do Decorator e do Adapter
Conceitos-chave
- virtual proxy
- protection proxy
- remote proxy
- caching proxy
- interface do subject
- inicialização lazy
- controle de acesso
3 · Padrões Comportamentais8 tópicos
Padrão Chain of Responsibility
Passar requisições ao longo de uma cadeia de handlers, em que cada handler decide se processa a requisição ou a repassa para o próximo handler da cadeia.
Objetivos
- Construir um pipeline de logging ou middleware usando Chain of Responsibility
- Decidir quando o CoR é preferível a cadeias explícitas de if-else
Conceitos-chave
- interface de handler
- handler concreto
- repasse de requisição
- construção da cadeia
- pipelines de middleware
- desacoplamento entre remetente e receptor
Padrão Command
Encapsular uma requisição como um objeto, viabilizando parametrização, enfileiramento, logging e operações de undo/redo.
Objetivos
- Implementar undo/redo usando o padrão Command
- Usar o Command para desacoplar ações de UI da lógica de negócio
Conceitos-chave
- interface de command
- command concreto
- invoker
- receiver
- pilha de undo/redo
- macro commands
- fila de commands
- encapsulamento de requisição
Padrão Observer
Definir uma dependência um-para-muitos de modo que, quando um objeto muda de estado, todos os seus dependentes sejam notificados automaticamente. Base dos sistemas orientados a eventos.
Objetivos
- Implementar o Observer para um sistema de notificação de preços de ações
- Identificar e corrigir cenários de vazamento de memória em observers
Conceitos-chave
- subject/publisher
- observer/subscriber
- notificação de eventos
- baixo acoplamento
- modelo push vs. pull
- vazamentos de memória em observers
- event bus
Padrão Strategy
Definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis. Permite selecionar o algoritmo em tempo de execução sem alterar a classe de contexto.
Objetivos
- Substituir um dispatcher switch-case pelo padrão Strategy
- Implementar ordenação ou processamento de pagamentos com strategies intercambiáveis
Conceitos-chave
- interface de strategy
- strategy concreta
- classe de contexto
- substituição em tempo de execução
- encapsulamento de algoritmo
- funções de primeira classe como strategies
- policy objects
Padrão Template Method
Definir o esqueleto de um algoritmo em uma classe base, delegando algumas etapas às subclasses sem alterar a estrutura geral do algoritmo.
Objetivos
- Implementar um framework de parsing de dados usando Template Method
- Comparar Template Method (herança) com Strategy (composição)
Conceitos-chave
- template method
- operações primitivas
- hook methods
- princípio de Hollywood
- operações abstratas
- operações concretas
- extensão baseada em herança
Padrão State
Permitir que um objeto altere seu comportamento quando seu estado interno muda. O objeto parece mudar de classe.
Objetivos
- Modelar uma máquina de vendas ou um semáforo usando o padrão State
- Refatorar uma classe repleta de condicionais em uma máquina de estados
Conceitos-chave
- interface de state
- state concreto
- objeto de contexto
- transições de estado
- máquina de estados finita
- eliminação de flags de estado
- encapsulamento de comportamento por estado
Padrão Mediator
Definir um objeto que encapsula como um conjunto de objetos interage. Promove baixo acoplamento ao evitar que os objetos se refiram uns aos outros explicitamente.
Objetivos
- Substituir uma malha emaranhada de objetos por um Mediator
- Identificar quando o Mediator cria um antipadrão God Object
Conceitos-chave
- interface de mediator
- mediator concreto
- objetos colegas
- comunicação centralizada
- redução de acoplamento
- analogia da sala de chat
- analogia do controle de tráfego aéreo
Padrão Iterator
Fornecer uma forma de acessar sequencialmente os elementos de uma coleção sem expor sua representação interna.
Objetivos
- Implementar um Iterator customizado para percorrer uma árvore
- Explicar a diferença entre iteradores internos e externos
Conceitos-chave
- interface de iterator
- iterator concreto
- interface de agregado
- iteração interna vs. externa
- avaliação lazy
- posição do cursor
- protocolos de iteração da linguagem
4 · Princípios SOLID3 tópicos
Princípios da Responsabilidade Única e Aberto/Fechado
SRP: uma classe deve ter apenas um motivo para mudar. OCP: entidades de software devem estar abertas para extensão, mas fechadas para modificação. Fundamenta a maioria das aplicações de padrões.
Objetivos
- Dividir uma God Class em classes coesas com responsabilidade única
- Aplicar o OCP adicionando comportamento por extensão em vez de modificação
Conceitos-chave
- um único motivo para mudar
- coesão
- separação de responsabilidades
- aberto para extensão
- fechado para modificação
- arquitetura de plugins
- abstração como ponto de extensão
Princípios da Substituição de Liskov e Segregação de Interface
LSP: subtipos devem poder substituir seus tipos base. ISP: clientes não devem ser forçados a depender de interfaces que não utilizam.
Objetivos
- Identificar e corrigir uma violação do LSP em uma hierarquia de herança
- Decompor uma fat interface em interfaces específicas de papel
Conceitos-chave
- subtipagem comportamental
- preservação de contrato
- substituibilidade
- interface inchada (fat interface)
- interfaces de papel (role interfaces)
- poluição de interface
- regras de pré-condição/pós-condição
Princípio da Inversão de Dependência
Módulos de alto nível não devem depender de módulos de baixo nível — ambos devem depender de abstrações. Viabiliza diretamente a injeção de dependência e arquiteturas testáveis.
Objetivos
- Refatorar uma classe fortemente acoplada para depender de abstrações
- Implementar injeção por construtor e explicar os benefícios para a testabilidade
Conceitos-chave
- módulo de alto nível
- módulo de baixo nível
- dependência de abstração
- injeção de dependência
- container de IoC
- injeção por construtor
- testabilidade
5 · Antipadrões e Seleção de Padrões1 tópico
Seleção de Padrões e Antipadrões
Saber quando NÃO usar um padrão. Aborda engenharia excessiva, abstração prematura, obsessão por padrões e aplicações incorretas comuns, como abuso do Singleton e uso inadequado do Visitor.
Objetivos
- Reconhecer e remover complexidade desnecessária de padrões em uma base de código
- Justificar quando uma função simples ou estrutura de dados supera um padrão
Conceitos-chave
- engenharia excessiva
- abstração prematura
- abuso do Singleton
- custo de complexidade do Visitor
- Mediator como God Object
- complexidade acidental
- princípio YAGNI
- custo-benefício dos padrões
Níveis: Júnior, Pleno, Sênior e Especialista
Explique com suas palavras
Corrigido por IA · sem cadastro · 1 perguntaSem alternativas para chutar: você escreve, a IA corrige com a rubrica do tópico e diz em que nível sua resposta está.
Já estuda Padrões de Design?
A avaliação mede tópico por tópico, e o plano pula o que você já sabe.
Aberto para ler. A conta só é necessária para ser medido.
Perguntas frequentes
Por onde começar a estudar Padrões de Design?
Comece por Padrões Criacionais: Padrão Singleton, Padrão Factory Method e Padrão Abstract Factory. O mapa ordena os tópicos pelo que depende de quê, então cada um prepara o seguinte.
Quanto tempo leva uma avaliação completa de Padrões de Design?
Uma avaliação completa desta trilha leva cerca de 55 minutos. O tempo de estudo depende de onde você começa; o diagnóstico mostra quais tópicos você pode pular.
Preciso de conta para usar esta página?
Não. O mapa, os objetivos e os conceitos-chave são abertos. A conta só é necessária para ser medido, ver seu gap por tópico e receber um plano.