Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε την έννοια και την εφαρμογή του μοτίβου Διακοσμητής στον αντικειμενοστραφή προγραμματισμό;

sobes.tech AI

Απάντηση από AI

Το μοτίβο Decorator επιτρέπει την δυναμική προσθήκη νέων ευθυνών σε αντικείμενα, τυλίγοντάς τα σε άλλα αντικείμενα decorator, χωρίς να αλλάζει ο πηγαίος κώδικας της κλάσης. Αυτό είναι ιδιαίτερα χρήσιμο όταν θέλετε να επεκτείνετε τη λειτουργικότητα χωρίς κληρονομικότητα.

Παράδειγμα: υπάρχει μια βασική διεπαφή Ποτό με τη μέθοδο κόστος(). Μπορείτε να δημιουργήσετε μια κλάση Καφές, και στη συνέχεια decorators ΜεΓάλα, ΜεΖάχαρη, που προσθέτουν στο κόστος και αλλάζουν τη συμπεριφορά.

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

Έτσι, μπορείτε να συνδυάσετε λειτουργικότητα με ευελιξία χωρίς να δημιουργείτε πολλές υποκλάσεις.