Sobes.tech
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("Ավելացված վարքագիծ");
    }
}