Junior — Middle
Môžete vysvetliť rozdiely medzi vzormi Adapter a Decorator v kontexte návrhu softvéru?
sobes.tech AI
Odpoveď od AI
Vzorce Adapter a Decorator sa často zamieňajú, ale majú odlišné ciele a spôsoby použitia:
-
Adapter (Prispôsobovač) — slúži na transformáciu rozhrania jednej triedy na rozhranie, ktoré očakáva klient. Používa sa, keď je potrebné, aby nesúrodé rozhrania spolupracovali. Adaptér obalí objekt a prekladá volania klienta na volania upraveného objektu.
-
Decorator (Dekorátor) — je určený na dynamické pridávanie nových zodpovedností objektu bez zmeny jeho rozhrania. Dekorátor obalí objekt a rozširuje alebo mení jeho správanie.
Kľúčové rozdiely:
- Adaptér mení rozhranie objektu, aby bol kompatibilný s klientom.
- Dekorátor zachováva rozhranie objektu, ale pridáva nové správanie.
Príklad v Jave:
// Adaptér: prispôsobenie rozhrania
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Špecifická požiadavka");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Dekorátor: pridanie správania
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Hlavná operácia");
}
}
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("Dodatočné správanie");
}
}