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");
}
}