Padrões de Projeto
Singleton, Factory, Observer e outros
Padrões de projeto são soluções reutilizáveis para problemas recorrentes de design de software. Definidos no livro "Design Patterns" do Gang of Four (GoF), são divididos em Criacionais (como criar objetos), Estruturais (como compor classes e objetos), e Comportamentais (como classes se comunicam).
Os mais usados no dia a dia: Singleton (garante uma única instância global), Factory Method (delega a criação de objetos para subclasses), Builder (constrói objetos complexos passo a passo de forma fluente), Strategy (encapsula algoritmos intercambiáveis), Observer (notificação pub/sub), e Decorator (adiciona responsabilidades dinamicamente).
Spring Framework usa intensamente padrões GoF por baixo dos panos: IoC Container é Factory + Singleton, AOP é Proxy/Decorator, @EventListener é Observer. Conhecer os padrões ajuda a entender o framework muito mais rapidamente.
// ── Singleton: uma única instância global ────────
public class Configuracao {
private static Configuracao instancia;
private String ambiente = "producao";
private Configuracao() {} // construtor privado
public static synchronized Configuracao getInstance() {
if (instancia == null) instancia = new Configuracao();
return instancia;
}
public String getAmbiente() { return ambiente; }
}
// ── Builder: construção fluente passo a passo ─────
public class Email {
private final String para, assunto, corpo;
private Email(Builder b) {
this.para = b.para; this.assunto = b.assunto; this.corpo = b.corpo;
}
public static class Builder {
private String para, assunto, corpo;
public Builder para(String p) { this.para = p; return this; }
public Builder assunto(String s) { this.assunto = s; return this; }
public Builder corpo(String c) { this.corpo = c; return this; }
public Email build() { return new Email(this); }
}
}
// Uso
Email email = new Email.Builder()
.para("user@example.com")
.assunto("Bem-vindo!")
.corpo("Seja bem-vindo ao sistema.")
.build();Não force padrões onde não são necessários — isso cria complexidade sem valor. Aplique quando resolver um problema real. "YAGNI" (You Ain't Gonna Need It) também se aplica a design patterns.