Junior — Middle
Μπορείτε να εξηγήσετε τις διαφορές μεταξύ των προτύπων Adapter και Decorator στο πλαίσιο του σχεδιασμού λογισμικού;
sobes.tech AI
Απάντηση από AI
Τα μοτίβα Adapter και Decorator συχνά συγχέονται, αλλά έχουν διαφορετικούς στόχους και τρόπους εφαρμογής:
-
Adapter (Προσαρμογέας) — χρησιμεύει για τη μετατροπή του διεπαφής μιας κλάσης στη διεπαφή που περιμένει ο πελάτης. Χρησιμοποιείται όταν πρέπει να κάνουν συνεργασία ασυμβίβαστων διεπαφών. Ο προσαρμογέας περικλείει το αντικείμενο και μεταφράζει τις κλήσεις του πελάτη σε κλήσεις στο προσαρμοσμένο αντικείμενο.
-
Decorator (Διακοσμητής) — προορίζεται για την δυναμική προσθήκη νέων ευθυνών σε ένα αντικείμενο χωρίς να αλλάξει η διεπαφή του. Ο διακοσμητής περικλείει το αντικείμενο και επεκτείνει ή τροποποιεί τη συμπεριφορά του.
Βασικές διαφορές:
- Ο προσαρμογέας αλλάζει τη διεπαφή του αντικειμένου ώστε να είναι συμβατή με τον πελάτη.
- Ο διακοσμητής διατηρεί τη διεπαφή του αντικειμένου, αλλά προσθέτει νέα συμπεριφορά.
Παράδειγμα σε Java:
// Adapter: προσαρμογή της διεπαφής
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();
}
}
// Decorator: προσθήκη συμπεριφοράς
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("Πρόσθετη συμπεριφορά");
}
}