Junior — Middle
¿Puedes explicar las diferencias entre los patrones Adapter y Decorator en el contexto del diseño de software?
sobes.tech AI
Respuesta de la IA
Los patrones Adapter y Decorator a menudo se confunden, pero tienen diferentes objetivos y formas de aplicación:
-
Adapter (Adaptador) — sirve para transformar la interfaz de una clase en la interfaz que espera el cliente. Se usa cuando es necesario hacer que interfaces incompatibles trabajen juntas. El adaptador envuelve el objeto y traduce las llamadas del cliente en llamadas al objeto adaptado.
-
Decorator (Decorador) — está diseñado para agregar dinámicamente nuevas responsabilidades a un objeto sin cambiar su interfaz. El decorador envuelve el objeto y amplía o modifica su comportamiento.
Diferencias clave:
- El Adapter cambia la interfaz del objeto para que sea compatible con el cliente.
- El Decorator mantiene la interfaz del objeto, pero añade un nuevo comportamiento.
Ejemplo en Java:
// Adapter: adaptando la interfaz
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Solicitud específica");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Decorator: agregando comportamiento
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Operación 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("Comportamiento adicional");
}
}