Sobes.tech
Junior — Middle

Կարող եք բացատրել Դեկորատոր դիզայնի նմուշի կոնցեպցիան և կիրառումը օբյեկտային ծրագրավորման մեջ?

sobes.tech AI

Պատասխան AI-ից

Դեկորատոր մոդելը թույլ է տալիս դինամիկ ավելացնել նոր պատասխանատվություններ օբյեկտներին՝ նրանց պատել ուրիշ դեկորատոր օբյեկտներով, առանց դասի ծագման կոդը փոխելու: Սա հատկապես օգտակար է, երբ անհրաժեշտ է ընդլայնել գործառույթը ժառանգության առանց:

Օրինակ՝ կա հիմնական Մեղր ինտերֆեյս և արժեք() մեթոդը: Դուք կարող եք ստեղծել Կոֆե դասը, ապա դեկորատորներ Կաթով, Շաքարով, որոնք ավելացնում են արժեքը և փոխում են վարքագիծը:

interface Մեղր {
    double արժեք();
}

class Կոֆե implements Մեղր {
    public double արժեք() { return 5.0; }
}

class ԴեկորատորԿաթով implements Մեղր {
    private Մեղր մեղր;
    public ԴեկորատորԿաթով(Մեղր մեղր) { this.մեղր = մեղր; }
    public double արժեք() { return մեղր.արժեք() + 1.0; }
}

// Օգտագործում
Մեղր կոֆե = new Կոֆե();
Մեղր կոֆեԿաթով = new ԴեկորատորԿաթով(կոֆե);
System.out.println(կոֆեԿաթով.արժեք()); // 6.0

Այսպիսով, դուք կարող եք ճկունորեն համակցել գործառույթը՝ առանց շատ ենթակլասներ ստեղծելու։