Με την άνοδο της αρχιτεκτονικής προσανατολισμένης στις υπηρεσίες (SOA), όλο και περισσότεροι οργανισμοί χρησιμοποιούν υπηρεσίες τρίτων για τα εταιρικά τους συστήματα. Αυτές οι εταιρείες πρέπει να συμβαδίζουν με ένα ταχέως μεταβαλλόμενο επιχειρηματικό περιβάλλον, το οποίο μπορεί να σημαίνει την εγκατάλειψη των υπηρεσιών ενός παρόχου υπηρεσιών για έναν άλλο.
Σε τέτοιες περιπτώσεις, η υπάρχουσα αρχιτεκτονική μιας επιχείρησης μπορεί να είναι ασύμβατη με αυτήν ενός νέου παρόχου. Αντί να σπαταλάει μήνες για να ξαναγράψει τον εταιρικό κώδικα για να τον κάνει συμβατό με νέο λογισμικό, μια επιχείρηση μπορεί να χρησιμοποιήσει το μοτίβο σχεδίασης προσαρμογέα.
Τι είναι το μοτίβο σχεδίασης προσαρμογέα;
Το μοτίβο προσαρμογέα επιτρέπει σε κλάσεις που έχουν μη συμβατές διεπαφές να συνεργάζονται. Αυτό το κάνει μετατρέποντας τη διεπαφή μιας υπάρχουσας κλάσης (ή λογισμικού) σε αυτήν που αναμένει ένας πελάτης (ή υπηρεσία). Υπάρχουν δύο τύποι προσαρμογέων: προσαρμογείς αντικειμένου και προσαρμογείς κλάσης.
Ο προσαρμογέας αντικειμένου χρησιμοποιεί σύνθεση για να τυλίξει τον προσαρμογέα με τον προσαρμογέα, παράγοντας ουσιαστικά τη διεπαφή που αναμένει ο πελάτης. Έτσι, εάν ο πελάτης περιμένει μια συμβολοσειρά, ο προσαρμογέας θα πάρει έναν ακέραιο (τον προσαρμογέα) και θα του δώσει τα χαρακτηριστικά μιας συμβολοσειράς.
Το παραπάνω διάγραμμα κλάσης αντιπροσωπεύει τον προσαρμογέα αντικειμένου. ο κατηγορία προσαρμογέα υλοποιεί το διεπαφή στόχου, αποκτώντας ουσιαστικά πρόσβαση σε όλες τις μεθόδους της διεπαφής. Στη συνέχεια προσαρμόζει ένα προσαρμοσμένος και το τυλίγει προσαρμοσμένος με την διεπαφή στόχου μεθόδους.
Ο προσαρμογέας κλάσης χρησιμοποιεί πολλαπλή κληρονομικότητα, όπου η κλάση προσαρμογέα είναι η υποκλάση τόσο του προσαρμογέα όσο και της κλάσης προορισμού. Το παρακάτω διάγραμμα κλάσης αντιπροσωπεύει τον προσαρμογέα κλάσης, τον οποίο μπορείτε να χρησιμοποιήσετε ελεύθερα σε γλώσσες προγραμματισμού που υποστηρίζουν πολλαπλή κληρονομικότητα.
Εφαρμογή του μοτίβου σχεδίασης προσαρμογέα σε Java
Αυτή η εφαρμογή θα εφαρμόσει τον προσαρμογέα αντικειμένου. Αυτό το δείγμα εφαρμογής θα προσομοιώσει έναν χρηματοπιστωτικό οργανισμό που μεταβαίνει από τη χρήση και την επεξεργασία των χρεωστικών καρτών σε πιστωτικές κάρτες. Αυτός ο οργανισμός χρησιμοποίησε αρχικά την ακόλουθη διεπαφή κάρτας χρέωσης:
δημόσιοδιεπαφήΧρεωστική κάρτα{
δημόσιοκενόςμηνιαίο Υπόλοιπο();
δημόσιοκενόςχρέωση καθυστέρησης();
δημόσιοκενόςΕτήσια συνδρομή();
}
Ένας δημοφιλής τύπος κάρτας χρέωσης που επεξεργάζεται το σύστημα αυτού του οργανισμού είναι η κάρτα Plum:
δημόσιοτάξηPlumCardυλοποιείΧρεωστική κάρτα{
ιδιωτικόςενθ κάρτα αριθ.
ιδιωτικός Συμβολοσειρά πελάτηΌνομα;
ιδιωτικόςδιπλό ισορροπία;// πρωτεύων κατασκευαστής
δημόσιοPlumCard(ενθ cardNo, String clientName, διπλό ισορροπία){
Αυτό.cardNo = cardNo;
Αυτό.customerName = Όνομα πελάτη;
Αυτό.balance = ισορροπία;
}
// getters και setters
δημόσιοενθgetCardNo(){
ΕΠΙΣΤΡΟΦΗ κάρτα αριθ.
}
δημόσιοκενόςsetCardNo(ενθ κάρτα αριθ.){
Αυτό.cardNo = cardNo;
}
δημόσιο Σειρά getCustomerName(){
ΕΠΙΣΤΡΟΦΗ Όνομα πελάτη;
}
δημόσιοκενόςsetCustomerName(Συμβολοσειρά Όνομα πελάτη){
Αυτό.customerName = Όνομα πελάτη;
}
δημόσιοδιπλόgetBalance(){
ΕΠΙΣΤΡΟΦΗ ισορροπία;
}
δημόσιοκενόςsetBalance(διπλό ισορροπία){
Αυτό.balance = ισορροπία;
}
@Καταπατώ
δημόσιοκενόςμηνιαίο Υπόλοιπο(){
System.out.println("Τον Ιανουάριο " + Αυτό.customerName + "ξόδεψε" + Αυτό.ισορροπία);
}
@Καταπατώ
δημόσιοκενόςχρέωση καθυστέρησης(){
System.out.println(Αυτό.customerName + "Η μηνιαία χρέωση είναι 80,00 $");
}
@Καταπατώ
δημόσιοκενόςΕτήσια συνδρομή(){
System.out.println(Αυτό.customerName + "Η ετήσια αμοιβή είναι 200,00 $");
}
}
Αυτό το χρηματοπιστωτικό ίδρυμα μεταβαίνει σε πιστωτικές κάρτες και καταργεί σταδιακά τις κάρτες χρέωσης, επομένως ορισμένοι από τους πελάτες του έχουν πλέον πιστωτικές κάρτες:
δημόσιοδιεπαφήΠιστωτική κάρτα{
δημόσιοκενόςμηνιαία MinPayment();
δημόσιοκενόςενδιαφέρον();
δημόσιοκενόςΕτήσια συνδρομή();
}
Το εταιρικό σύστημα χρηματοπιστωτικών ιδρυμάτων επεξεργάζεται πλέον μόνο πιστωτικές κάρτες, καθώς προσπαθεί να διακόψει τη χρήση των χρεωστικών καρτών το επόμενο έτος. Αλλά οι περισσότεροι πελάτες τους εξακολουθούν να χρησιμοποιούν κάρτες χρέωσης. Έτσι, οι μηχανικοί αποφάσισαν ότι ήταν καλύτερο να εφαρμόσουν έναν προσαρμογέα έως ότου όλοι οι πελάτες τους μεταβούν σε μια πιστωτική κάρτα.
δημόσιοτάξηChargeCardAdapterυλοποιείΠιστωτική κάρτα{
ChargeCard chargeCard;δημόσιοChargeCardAdapter(ChargeCard chargecard){
Αυτό.chargeCard = κάρτα χρέωσης;
}@Καταπατώ
δημόσιοκενόςμηνιαία MinPayment(){
Αυτό.chargeCard.monthlyBalance();
}@Καταπατώ
δημόσιοκενόςενδιαφέρον(){
Αυτό.chargeCard.lateFee();
}
@Καταπατώ
δημόσιοκενόςΕτήσια συνδρομή(){
Αυτό.χρεωστική κάρτα. Ετήσια συνδρομή();
}
}
Αυτός ο προσαρμογέας ChargeCard Κλάση Java υλοποιεί την Πιστωτική Κάρτα Διεπαφή Java. Προσαρμόζει την ChargeCard (τον προσαρμοσμένο), δίνοντάς της τα χαρακτηριστικά μιας πιστωτικής κάρτας. Για παράδειγμα, το σύστημα θα επεξεργάζεται το τέλος τόκου μιας πιστωτικής κάρτας, το οποίο είναι το τέλος καθυστέρησης ενός πελάτη χρεωστικής κάρτας που δεν έχει κάνει ακόμη μετατροπή.
Πλεονεκτήματα της χρήσης του μοτίβου προσαρμογέα
Το κύριο πλεονέκτημα της χρήσης του μοτίβου προσαρμογέα είναι ότι επιτρέπει στους πελάτες να χρησιμοποιούν νέες υπηρεσίες, βιβλιοθήκες και δυνατότητες χωρίς να αλλάζουν τον κώδικά τους. Αυτό προάγει την επεκτασιμότητα της εφαρμογής.
Ένα άλλο πλεονέκτημα είναι ότι αυτό το σχέδιο είναι επίσης ευέλικτο. Το μοτίβο προσαρμογέα παρέχει δύο μεθόδους υλοποίησης: προσαρμογείς αντικειμένου και προσαρμογείς κλάσεων.