Junior — Middle
Puteți explica diferențele dintre modelele Adapter și Decorator în contextul proiectării software?
sobes.tech AI
Răspuns de la AI
Modelele Adapter și Decorator sunt adesea confundate, dar au scopuri și moduri de aplicare diferite:
-
Adapter (Adaptor) — servește pentru a transforma interfața unei clase în interfața pe care o așteaptă clientul. Este utilizat atunci când trebuie să facă interfețe incompatibile să funcționeze împreună. Adaptorul învelește obiectul și traduce apelurile clientului în apeluri către obiectul adaptat.
-
Decorator (Decoratoare) — este destinat să adauge în mod dinamic responsabilități noi unui obiect fără a-i modifica interfața. Decoratorul învelește obiectul și extinde sau modifică comportamentul său.
Diferențe cheie:
- Adapterul schimbă interfața obiectului pentru a fi compatibil cu clientul.
- Decoratorul păstrează interfața obiectului, dar adaugă un comportament nou.
Exemplu în Java:
// Adapter: adaptarea interfeței
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Cerere specifică");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Decorator: adăugarea comportamentului
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Operație 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("Comportament suplimentar");
}
}