Junior — Middle
Meg tudná magyarázni az Adapter és Decorator minták közötti különbségeket a szoftvertervezés kontextusában?
sobes.tech MI
Válasz az MI-től
Az Adapter és Decorator minták gyakran összetévesztik egymással, de különböző célokat és alkalmazási módokat szolgálnak:
-
Adapter (Adapter) — arra szolgál, hogy egy osztály interfészét a kliens által elvárt interfésszé alakítsa. Akkor használják, amikor inkompatibilis interfészeket kell együttműködtetni. Az adapter becsomagolja az objektumot, és a kliens hívásait az adaptált objektum hívásaira fordítja.
-
Decorator (Díszítő) — célja, hogy dinamikusan új felelősségeket adjon egy objektumnak anélkül, hogy megváltoztatná az interfészét. Az dekorátor becsomagolja az objektumot, és kibővíti vagy módosítja a viselkedését.
Fő különbségek:
- Az Adapter megváltoztatja az objektum interfészét, hogy az kompatibilis legyen a klienssel.
- A Decorator megőrzi az objektum interfészét, de új viselkedést ad hozzá.
Java példával:
// Adapter: interfész alkalmazása
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Specifikus kérés");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Decorator: viselkedés hozzáadása
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Fő művelet");
}
}
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("Kiegészítő viselkedés");
}
}