Sobes.tech
Junior — Middle

Pode explicar as diferenças entre os padrões Adapter e Decorator no contexto do design de software?

sobes.tech IA

Resposta da IA

Os padrões Adapter e Decorator são frequentemente confundidos, mas têm objetivos e formas de aplicação diferentes:

  • Adapter (Adaptador) — serve para transformar a interface de uma classe na interface que o cliente espera. É usado quando é necessário fazer interfaces incompatíveis trabalharem juntas. O adaptador envolve o objeto e traduz as chamadas do cliente em chamadas ao objeto adaptado.

  • Decorator (Decorador) — destina-se a adicionar dinamicamente novas responsabilidades a um objeto sem alterar sua interface. O decorador envolve o objeto e amplia ou modifica seu comportamento.

Diferenças principais:

  • O Adapter altera a interface do objeto para que seja compatível com o cliente.
  • O Decorator mantém a interface do objeto, mas adiciona um novo comportamento.

Exemplo em Java:

// Adapter: adaptando a interface
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Requisição específica");
    }
}

class Adapter implements Target {
    private Adaptee adaptee;
    Adapter(Adaptee a) { this.adaptee = a; }
    public void request() {
        adaptee.specificRequest();
    }
}

// Decorator: adicionando comportamento
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Operação principal");
    }
}

class Decorator implements Component {
    protected Component component;
    Decorator(Component c) { this.component = c; }
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends Decorator {
    ConcreteDecorator(Component c) { super(c); }
    public void operation() {
        super.operation();
        System.out.println("Comportamento adicional");
    }
}