Tópico 02 - Introdução a Design Patterns

Tópico 01: Introdução a Design Patterns

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Design não é aparência, é como funciona.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

"Design é o ato de decidir como algo deve ser" - Jesse Schell

Todo design nasce de um problema a ser resolvido e de uma decisão tomada pra resolvê-lo.

Nem todo design é bom, mas todo design tem um propósito.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns


Qual a melhor maneira de conectar dois andares?

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Conectando os pontos

A escada é um padrão de design recorrente. Porém não é a única solução possível.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Design Patterns

Um design pattern é uma solução reutilizável para um problema recorrente.

Sempre que precisarmos chegar ao segundo andar, podemos usar a mesma ideia de design, adaptando-a ao contexto.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Origem (1/2)

  • Conceito de “padrão” veio da Arquitetura
  • Christopher Alexander: 1977: A Pattern Language
    • Padrões para projetar cidades, prédios, ambientes
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Origem (2/2)

  • Adaptado para software nos anos 90
  • “Gang of Four” (GoF):
    • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • Livro (1994):
    Design Patterns: Elements of Reusable Object-Oriented Software
  • Catálogo clássico com 23 padrões
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

O que NÃO é Design Pattern

  • Framework: conjunto de classes e bibliotecas
  • API: conjunto de funções e métodos
  • Biblioteca: conjunto de funções, classes e recursos
  • Boilerplate: código repetitivo e padronizado
  • Código pronto: código que resolve um problema específico
  • Algoritmo: sequência de passos para resolver um problema específico
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplo de ideia de padrão

O código abaixo cria um objeto Carro com vários parâmetros:

public class Carro {
  private String cor;
  private int portas;
  private float velocidadeMaxima;

  private Carro(String cor, int portas, float velocidadeMaxima) {
    this.cor = cor;
    this.portas = portas;
    this.velocidadeMaxima = velocidadeMaxima;
  }
}
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Para instanciar um carro, precisamos passar todos os parâmetros:

Carro carro = new Carro("vermelho", 4, 200);

Mas o que acontece se quisermos criar um carro com velocidade máxima padrão de 200 km/h?

E se nosso carro tiver muitos parâmetros? Teremos que criar muitos construtores?

Vamos resolver esse problema adaptando uma solução bem conhecida.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns
public static class CarroBuilder {
    private String cor;
    private int portas;
    private float velocidadeMaxima = 200;

    public CarroBuilder setCor(String cor) {
      this.cor = cor; return this;
    }

    public CarroBuilder setPortas(int portas) {
      this.portas = portas; return this;
    }

    public CarroBuilder setVelocidadeMaxima(float velocidadeMaxima) {
      this.velocidadeMaxima = velocidadeMaxima; return this;
    }

    public Carro build() {
      return new Carro(cor, portas, velocidadeMaxima);
    }
  }
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Ao invés de:

Carro carro = new Carro("vermelho", 4, 200);

Podemos usar:

Carro carro = new CarroBuilder()
  .setCor("vermelho")
  .setPortas(4)
  .build();

Será criado um carro vermelho, com 4 portas e velocidade máxima de 200 km/h.

Mas onde foi que definimos que a velocidade máxima padrão é 200 km/h?

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Explicação do Padrão

O exemplo anterior utiliza um padrão chamado Builder.

Esse padrão é útil quando:

  • Um objeto tem muitos parâmetros
  • Alguns parâmetros são opcionais
  • Queremos evitar construtores com muitos argumentos
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Importância

Padrões ajudam a:

  • Reutilizar soluções testadas
  • Melhorar a comunicação entre desenvolvedores
  • Organizar melhor o código
  • Facilitar manutenção e evolução
  • Reduzir riscos de “reinventar a roda”
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Coesão e Acoplamento

Em engenharia de software, o acoplamento é o nível de interdependência entre dois módulos de software.

É geralmente um contraste ao conceito de coesão.

Coesão é uma medida do quão similares são os elementos de um sistema.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Ciclo de Evolução do Software

Nenhum software nasce feito sob padrões. Ele evolui com o tempo, e padrões podem surgir quando necessário.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Comunicação com padrões

  • "Vamos usar um Builder aqui"
  • "Isso parece um Observer"
  • "Esse código é um Strategy"

Cada uma dessas frases comunica:

  • o problema
  • a ideia de solução
  • as consequências esperadas
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Limitações

Críticas (1/4): Sintoma de problema

  • Às vezes o padrão “nasce” de uma limitação da linguagem
  • Linguagens modernas tornam alguns padrões:
    • triviais
    • desnecessários

Ex.: Strategy pode virar apenas “passar função como parâmetro” em linguagens funcionais.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Críticas (2/4): Overengineering

  • Uso exagerado de padrões
  • Problemas:
    • muito código para pouco ganho
    • excesso de classes / interfaces
    • mais difícil de entender

Regra prática:

Comece simples. Introduza um padrão quando houver um motivo claro.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Críticas (3/4): Não são bala de prata

Padrões não:

  • consertam modelo de domínio ruim
  • resolvem decisões arquiteturais equivocadas
  • substituem entendimento do problema

São ferramentas, não objetivo final.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Críticas (4/4): Jargão

  • Muito nome: Factory, Visitor, Decorator, Proxy...
  • Pode:
    • excluir quem é iniciante
    • gerar mal-entendidos se o time não conhece os termos

Dica:

  • Use o nome do padrão
  • Mas explique a intenção: “resolver X fazendo Y”.
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Categorias Clássicas

A GoF agrupou os padrões em 3 categorias:

  • Criacionais
  • Estruturais
  • Comportamentais

Cada categoria agrupa padrões com propósitos parecidos.

Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Padrões Criacionais

  • Problema: como criar objetos de maneira eficiente?
  • Evitar:
    • new espalhado
    • acoplamento à implementação
    • permitir flexibilidade na criação de objetos
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplos de padrões criacionais

  • Singleton
  • Factory Method
  • Abstract Factory
  • Builder
  • Prototype
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplo simples: Factory Method

public interface Transporte {
  void entregar();
}

public class Caminhao implements Transporte {
  public void entregar() { System.out.println("Entrega por caminhão"); }
}

public abstract class Logistica {
  public void planejarEntrega() {
    Transporte t = criarTransporte();
    t.entregar();
  }

  protected abstract Transporte criarTransporte();
}
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Padrões Estruturais

  • Problema: como organizar classes/objetos de maneira flexível?
  • Evitar:
    • acoplamento excessivo
    • dependência de implementação
    • permitir composição de objetos
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplos de padrões estruturais

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplo simples: Adapter

// API antiga
class TomadaAntiga {
  void ligarDoisPinos() { ... }
}

// Nova interface esperada
interface TomadaTresPinos {
  void ligarTresPinos();
}

// Adapter
class Adaptador implements TomadaTresPinos {
  private TomadaAntiga antiga;
  public Adaptador(TomadaAntiga antiga) { this.antiga = antiga; }
  public void ligarTresPinos() { antiga.ligarDoisPinos(); }
}
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Padrões Comportamentais

  • Problema: como objetos interagem sem alto acoplamento?
  • Evitar:
    • mudanças em uma classe afetarem outras
    • permitir reutilização de algoritmos
    • permitir flexibilidade na comunicação entre objetos
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplos de padrões comportamentais

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Observer
  • Strategy
  • Template Method
  • Visitor
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Exemplo simples: Observer

interface Observador {
  void atualizar();
}

class Sujeito {
  private List<Observador> obs = new ArrayList<>();
  void adicionar(Observador o) { obs.add(o); }
  void notificar() {
    for (Observador o : obs) o.atualizar();
  }
}
  • Vários objetos reagem a um evento sem o sujeito saber detalhes deles
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Estrutura de um Padrão

  • Problema: resolve um problema recorrente
  • Estrutura UML: diagrama de classes ou sequência
  • Participantes: classes e objetos envolvidos
  • Solução: descreve a ideia de como resolver o problema
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Padrões no Desenvolvimento de Software

  • Fundamentos: encapsulamento, abstração, polimorfismo, herança
  • Princípios: SOLID, DRY, KISS, YAGNI
  • Padrões de Design: Criacionais, Estruturais, Comportamentais
  • Estilo: Code Style, Clean Code, Code Smells, Refactoring
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Outros tipos de padrões

Além dos GoF:

  • Arquiteturais: MVC, MVP, MVVM, Microservices, Event-Driven Architecture...
  • Integração: Message Bus, Publish-Subscribe, Event Sourcing, Saga Pattern...
  • Teste: Test Doubles, Mock Objects, Test Data Builders...
  • Distribuídos: Saga, CQRS, Event Sourcing, Circuit Breaker, Bulkhead...
  • Enterprise: Repository, Unit of Work, DTO, Active Record, Lazy Load...
  • Resiliência: Circuit Breaker, Rate Limit, Retry, Timeout, Fallback...
  • Cloud: Sidecar, Ambassador, Strangler Fig, Service Mesh, Serverless...
  • Segurança: Role-Based Access Control, Zero Trust, Secrets Management...
Design Patterns - Professor Ramon Venson - SATC 2026.2
Tópico 02 - Introdução a Design Patterns

Resumo

  • Padrões de design = vocabulário + soluções
  • Use para:
    • comunicar melhor
    • organizar melhor o código
  • Evite:
    • aplicar padrão “porque é bonito”
    • complexidade desnecessária
Design Patterns - Professor Ramon Venson - SATC 2026.2