Middle
Τι είναι ο διακοσμητής (Decorator);
sobes.tech AI
Απάντηση από AI
Ο διακοσμητής είναι ένα δομικό μοτίβο σχεδίασης που επιτρέπει την δυναμική προσθήκη νέας λειτουργικότητας σε ένα αντικείμενο, χωρίς να αλλάζει τη δομή του. Τυλίγει το αντικείμενο, παρέχοντας την ίδια διεπαφή με το τυλιγμένο αντικείμενο, ενώ προσθέτει ή τροποποιεί τη συμπεριφορά του.
Βασικά στοιχεία:
- Συστατικό (Component): Διεπαφή ή αφηρημένη κλάση που ορίζει τη κοινή λειτουργικότητα για τα τυλιγμένα αντικείμενα και τους διακοσμητές.
- Συγκεκριμένο συστατικό (Concrete Component): Υλοποίηση του συστατικού, το βασικό αντικείμενο στο οποίο προστίθεται λειτουργικότητα.
- Διακοσμητής (Decorator): Αφηρημένη κλάση που υλοποιεί τη διεπαφή του συστατικού και περιέχει μια αναφορά σε ένα αντικείμενο συστατικού.
- Συγκεκριμένος διακοσμητής (Concrete Decorator): Υλοποίηση του διακοσμητή που προσθέτει συγκεκριμένη λειτουργικότητα πριν ή μετά την κλήση της μεθόδου του τυλιγμένου αντικειμένου.
Παράδειγμα σε Python:
# Συστατικό
class Coffee:
def get_cost(self):
return 5 # Βασική τιμή καφέ
def get_description(self):
return "Απλικός καφές"
# Συγκεκριμένο συστατικό
class SimpleCoffee(Coffee):
pass
# Διακοσμητής
class CoffeeDecorator(Coffee):
def __init__(self, coffee):
self._coffee = coffee
def get_cost(self):
return self._coffee.get_cost()
def get_description(self):
return self._coffee.get_description()
# Συγκεκριμένος διακοσμητής
class MilkDecorator(CoffeeDecorator):
def get_cost(self):
return self._coffee.get_cost() + 2 # Προσθέτει το κόστος του γάλακτος
def get_description(self):
return self._coffee.get_description() + ", Γάλα"
# Χρήση
# simple_coffee = SimpleCoffee()
# print(f"Κόστος: {simple_coffee.get_cost()}, Περιγραφή: {simple_coffee.get_description()}")
# καφές με γάλα = MilkDecorator(simple_coffee)
# print(f"Κόστος: {καφές με γάλα.get_cost()}, Περιγραφή: {καφές με γάλα.get_description()}")
Πλεονεκτήματα:
- Ευελιξία: Η λειτουργικότητα προστίθεται κατά την εκτέλεση.
- Αποφυγή υποκατηγοριών: Επιτρέπει την αποφυγή δημιουργίας πολλών υποκατηγοριών για κάθε συνδυασμό συμπεριφορών.
- Διαχωρισμός ευθυνών: Κάθε προσθήκη συμπεριφοράς υλοποιείται σε ξεχωριστή κλάση.
Μειονεκτήματα:
- Μπορεί να αυξήσει τον αριθμό των κλάσεων.
- Η αποσφαλμάτωση μπορεί να γίνει πιο δύσκολη λόγω της αλυσίδας των περιτυλίξεων.