Padrões de Design: Fábrica, Proxy e Adaptador

O padrão factory resolve o problema de acoplamento entre classes filhas que compartilham uma interface comum. Em vez de instanciar diretamente objetos filhos, um classe intermediária controla a criação.

Estrutura Básica

interface Veiculo {
    void operar();
}
class Carro implements Veiculo {
    public void operar() {
        System.out.println("Carro em movimento");
    }
}
class Moto implements Veiculo {
    public void operar() {
        System.out.println("Moto acelerando");
    }
}

Classe de Fábrica

public class FabricaVeiculos {
    public static Veiculo criarVeiculo(String tipo) {
        switch(tipo) {
            case "carro": return new Carro();
            case "moto": return new Moto();
            default: return null;
        }
    }
}

Uso do Padrão

public class Teste {
    public static void main(String[] args) {
        Veiculo v = FabricaVeiculos.criarVeiculo("moto");
        v.operar();
    }
}

Padrão Proxy

Implementa uma camada intemrediária para controlar o acesso a um objeto, adicionando funcionalidades como validação ou log antes e depois da execução real.

Exemplo de Uso

interface Servico {
    void executar();
}
class ServicoReal implements Servico {
    public void executar() {
        System.out.println("Executando serviço real");
    }
}
class ServicoProxy implements Servico {
    private Servico real;
    
    public ServicoProxy(Servico s) {
        this.real = s;
    }
    
    public void executar() {
        System.out.println("Validando acesso...");
        real.executar();
        System.out.println("Log de execução salvo");
    }
}
public class TesteProxy {
    public static void main(String[] args) {
        Servico s = new ServicoProxy(new ServicoReal());
        s.executar();
    }
}

Padrão Adapter

Permite que interfaces incompatíveis trabalhem juntas através de uma classe adaptadora que converte chamadas entre os foramtos.

Implementação

interface Impressora {
    void imprimir(String texto);
}
interface Digitalizador {
    String digitalizar();
}
class ImpressoraAntiga implements Impressora {
    public void imprimir(String texto) {
        System.out.println("Imprimindo: " + texto);
    }
}
class Adaptador implements Impressora, Digitalizador {
    private ImpressoraAntiga impressora;
    
    public Adaptador(ImpressoraAntiga i) {
        this.impressora = i;
    }
    
    public void imprimir(String texto) {
        impressora.imprimir(texto);
    }
    
    public String digitalizar() {
        return "Texto digitalizado";
    }
}
public class TesteAdapter {
    public static void main(String[] args) {
        ImpressoraAntiga antiga = new ImpressoraAntiga();
        Adaptador adapter = new Adaptador(antiga);
        
        adapter.imprimir("Documento");
        System.out.println(adapter.digitalizar());
    }
}

Tags: design-patterns java object-oriented-programming factory-pattern proxy-pattern

Publicado em 7-29 16:32