Junior — Middle
Կարող եք բացատրել ծրագրային ապահովման նախագծման համատեքստում Adapter և Decorator ձևանմուշների տարբերությունները?
sobes.tech AI
Պատասխան AI-ից
Ադապտեր և Դեկորատոր ձևանմուշները հաճախ խառնվում են, բայց ունեն տարբեր նպատակներ և կիրառման եղանակներ:
-
Ադապտեր (Adapter) — ծառայում է մեկ դասի ինտերֆեյսը վերածելու համար այն ինտերֆեյսի, որը սպասում է հաճախորդը: Օգտագործվում է, երբ անհրաժեշտ է, որ անհամատեղելի ինտերֆեյսները աշխատեն միասին: Ադապտերը պատում է օբյեկտը և թարգմանում է հաճախորդի կանչերը հարմարեցված օբյեկտի կանչերին:
-
Դեկորատոր (Decorator) — նախատեսված է դինամիկ ավելացնել նոր պատասխանատվություններ օբյեկտին առանց նրա ինտերֆեյսը փոխելու: Դեկորատորը պատում է օբյեկտը և ընդլայնում կամ փոխում է նրա վարքագիծը:
Հիմնական տարբերությունները:
- Ադապտերը փոխում է օբյեկտի ինտերֆեյսը, որպեսզի այն լինի համատեղելի հաճախորդի հետ:
- Դեկորատորը պահպանում է օբյեկտի ինտերֆեյսը, բայց ավելացնում է նոր վարքագիծ:
Օրինակ Java-ում:
// Ադապտեր՝ ինտերֆեյսի հարմարեցում
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Հատուկ պահանջ");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Դեկորատոր՝ վարքագծի ավելացում
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Հիմնական գործողություն");
}
}
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("Ավելացված վարքագիծ");
}
}