Τι είναι το μοτίβο προσαρμογέα;
sobes.tech AI
Απάντηση από AI
Το πρότυπο προσαρμογέα (Adapter Pattern) είναι ένα δομικό πρότυπο σχεδίασης που επιτρέπει σε κλάσεις με ασυμβίβαστα interfaces να συνεργάζονται. Λειτουργεί ως ένα περίβλημα που μετατρέπει το interface μιας κλάσης σε ένα άλλο που αναμένει ο πελάτης.
Εφαρμογές:
- Ενσωμάτωση τρίτων βιβλιοθηκών με ασυμβίβαστα interfaces.
- Χρήση υπαρχόντων κλάσεων σε νέα συστήματα χωρίς τροποποίηση.
- Διασφάλιση αλληλεπίδρασης μεταξύ ανεξάρτητα αναπτυγμένων κλάσεων.
Παράδειγμα υλοποίησης (αντικειμενικός προσαρμογέας):
Ας υποθέσουμε ότι υπάρχει μια κλάση LegacyService με μια μέθοδο oldRequest():
class LegacyService {
public void oldRequest() {
// παλιός κώδικας
}
}
Και μια νέα διεπαφή NewService με μια μέθοδο newRequest():
interface NewService {
void newRequest();
}
Ο προσαρμογέας ServiceAdapter υλοποιεί το NewService και περιέχει μια αναφορά σε LegacyService:
class ServiceAdapter implements NewService {
private LegacyService legacyService;
public ServiceAdapter(LegacyService legacyService) {
this.legacyService = legacyService;
}
@Override
public void newRequest() {
// Μετατροπή της κλήσης της νέας μεθόδου σε παλιά
legacyService.oldRequest();
}
}
Ο πελάτης μπορεί να χρησιμοποιεί το LegacyService μέσω του interface NewService:
NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Θα καλέσει το oldRequest() στο LegacyService
Υπάρχει επίσης μια παραλλαγή — κλασικός προσαρμογέας, που χρησιμοποιεί πολλαπλή κληρονομικότητα (αν υποστηρίζεται από τη γλώσσα) ή κληρονομικότητα από την προσαρμοζόμενη κλάση και υλοποίηση του τελικού interface. Στη Java, λόγω της απουσίας πολλαπλής κληρονομικότητας, υλοποιείται μέσω κληρονομικότητας από την προσαρμοζόμενη κλάση και υλοποίησης του προσαρμογέα interface, αλλά αυτή η προσέγγιση είναι λιγότερο ευέλικτη. Ο αντικειμενικός προσαρμογέας είναι προτιμότερος, καθώς μπορεί να προσαρμόσει υποκλάσεις και να αποτρέψει αυστηρούς δεσμούς.
Πλεονεκτήματα:
- Επιτρέπει την επανάχρηση ασυμβίβαστων κλάσεων.
- Καλύπτει τις λεπτομέρειες της μετατροπής interfaces.
- Αυξάνει την ευελιξία του συστήματος.
Μειονεκτήματα:
- Μπορεί να αυξήσει την πολυπλοκότητα, προσθέτοντας μια νέα κλάση.
- Η απόδοση μπορεί να μειωθεί ελαφρώς λόγω ενός επιπλέον επιπέδου αφαίρεσης.