Μοτίβα σχεδίασης: Προσαρμογέας. Δομικά πρότυπα: Adapter Ready κώδικας για προσαρμογείς σε java

    Προσαρμογέας (μοτίβο σχεδίασης)/Παραδείγματα κώδικα- Κύριο άρθρο: Προσαρμογέας (μοτίβο σχεδίασης) Ένα παράδειγμα υλοποίησης προτύπου σε C# με χρήση του συστήματος. Προσαρμογέας χώρου ονομάτων ( class MainApp ( static void Main() ( ... Wikipedia

    Μοτίβο διακομιστή μεσολάβησης (μοτίβο σχεδίασης)

    Μοτίβο σχεδίασης- Αυτός ο όρος έχει άλλες έννοιες, βλέπε Μοτίβο. Στην ανάπτυξη λογισμικού, ένα σχέδιο σχεδίασης είναι ένα επαναλαμβανόμενο αρχιτεκτονικό σχέδιο που αντιπροσωπεύει μια λύση σε ένα πρόβλημα... ... Wikipedia

    Διεπαφή (μοτίβο σχεδίασης)- Σχεδιαστικό μοτίβο ΔιεπαφήΠεριγράφεται στο Design Patterns Όχι Στην επιστήμη των υπολογιστών, ένα μοτίβο διεπαφής δεν είναι ένα ειδικό μοτίβο μεταξύ των μοτίβων σχεδίασης. Είναι μια γενική μέθοδος δόμησης προγράμματα υπολογιστήγια αυτό... Wikipedia

    Αναπληρωτής (μοτίβο σχεδίασης)- Μοτίβο σχεδίασης Proxy Pattern (Deputy). Παρέχει ένα αντικείμενο ελέγχου πρόσβασης, παρεμποδίζοντας όλες τις κλήσεις προς αυτό. Περιεχόμενα 1 Στόχος 1.1 Πρόβλημα 1.2 Λύση 2 Πλεονεκτήματα 3 ... Wikipedia

    Φύλακας (μοτίβο σχεδίασης)- Design Pattern Guardian Memento Τύπος: Συμπεριφορικό που περιγράφεται στα μοτίβα σχεδίασης Ναι Guardian (επίσης γνωστό ως Memento, Token, Token) είναι ένα μοτίβο σχεδιασμού συμπεριφοράς. Σας επιτρέπει να διορθώσετε χωρίς να σπάσει η ενθυλάκωση... Wikipedia

    Iterator (μοτίβο σχεδίασης)- Design Pattern Iterator Iterator Τύπος: συμπεριφορικό Περιγράφεται στα Μοτίβα σχεδίασης Ναι Μοτίβο Επαναληπτικού (επίσης γνωστό ως Δρομέας) Ένα μοτίβο σχεδίασης που αναφέρεται σε μοτίβα συμπεριφοράς. Είναι ένα αντικείμενο που σας επιτρέπει να αποκτήσετε ... Wikipedia

    Διερμηνέας (μοτίβο σχεδίασης)- Μοτίβο σχεδίασης Τύπος διερμηνέα: συμπεριφορικός Σκοπός: επιλύει ένα πρόβλημα που εμφανίζεται συχνά, επιρρεπές σε αλλαγές που περιγράφεται στο Σχέδιο Μοτίβα Ναι Μοτίβο Διερμηνέα (Αγγλικά ... Wikipedia

    Σύνδεσμος (μοτίβο σχεδίασης)- Μοτίβο σχεδίασης Σύνθετος τύπος: δομικός Περιγράφεται σε Μοτίβα σχεδίασης Ναι Το σύνθετο μοτίβο είναι ένα σχέδιο σχεδίασης, αναφέρεται σε δομικά μοτίβα, συνδυάζει ένα αντικείμενο ... Wikipedia

    Κατάσταση (μοτίβο σχεδίασης)- Μοτίβο σχεδίασης κατάστασης Τύπος: συμπεριφοράς Περιγράφεται στα Μοτίβα σχεδίασης Ναι Η κατάσταση είναι ένα μοτίβο σχεδίασης. Χρησιμοποιείται σε περιπτώσεις όπου, κατά την εκτέλεση του προγράμματος, ένα αντικείμενο ... Wikipedia

    Κύριο άρθρο: Προσαρμογέας (μοτίβο σχεδίασης) Παράδειγμα υλοποίησης του μοτίβου σε C# με χρήση συστήματος. Προσαρμογέας χώρου ονομάτων ( class MainApp ( static void Main() ( ... Wikipedia

    Αυτός ο όρος έχει άλλες έννοιες, βλέπε Μοτίβο. Στην ανάπτυξη λογισμικού, ένα σχέδιο σχεδίασης είναι ένα επαναλαμβανόμενο αρχιτεκτονικό σχέδιο που αντιπροσωπεύει μια λύση σε ένα πρόβλημα... ... Wikipedia

    Διασύνδεση μοτίβων σχεδίασης διεπαφής που περιγράφεται στα μοτίβα σχεδίασης Όχι Στην επιστήμη των υπολογιστών, το μοτίβο διεπαφής δεν είναι ένα ειδικό μοτίβο μεταξύ των μοτίβων σχεδίασης. Είναι μια γενική μέθοδος δόμησης προγραμμάτων ηλεκτρονικών υπολογιστών προκειμένου να... Wikipedia

    Μοτίβο σχεδίασης μοτίβου διακομιστή μεσολάβησης. Παρέχει ένα αντικείμενο ελέγχου πρόσβασης, παρεμποδίζοντας όλες τις κλήσεις προς αυτό. Περιεχόμενα 1 Στόχος 1.1 Πρόβλημα 1.2 Λύση 2 Πλεονεκτήματα 3 ... Wikipedia

    Τύπος αναμνηστικού Guardian Pattern Design: Συμπεριφορικό που περιγράφεται στα μοτίβα σχεδίασης Ναι Guardian (επίσης γνωστό ως Memento, Token, Token) είναι ένα μοτίβο σχεδιασμού συμπεριφοράς. Σας επιτρέπει να διορθώσετε χωρίς να σπάσει η ενθυλάκωση... Wikipedia

    Τύπος επαναλήπτη επαναληπτικού μοτίβου σχεδίασης Τύπος επαναλήπτη επαναληπτικού μοτίβου: Συμπεριφορικό που περιγράφεται στα μοτίβα σχεδίασης Ναι Μοτίβο επαναληπτικού σχεδίου (γνωστό και ως δρομέας) Ένα μοτίβο σχεδίασης που αναφέρεται σε μοτίβα συμπεριφοράς. Είναι ένα αντικείμενο που σας επιτρέπει να αποκτήσετε ... Wikipedia

    Μοτίβο σχεδίασης Τύπος διερμηνέα: συμπεριφορικός Σκοπός: επιλύει ένα πρόβλημα που εμφανίζεται συχνά, επιρρεπές σε αλλαγές Περιγράφεται στο Σχέδιο Μοτίβα Ναι Μοτίβο διερμηνέα (Αγγλικά ... Wikipedia

    Μοτίβο σχεδίασης Σύνθετος τύπος: δομικός Περιγράφεται σε Μοτίβα σχεδίασης Ναι Το σύνθετο μοτίβο είναι ένα σχέδιο σχεδίασης, αναφέρεται σε δομικά μοτίβα, συνδυάζει ένα αντικείμενο ... Wikipedia

    Πρότυπο σχεδίασης Τύπος κατάστασης: συμπεριφοράς Περιγράφεται στα Μοτίβα σχεδίασης Ναι Η κατάσταση είναι ένα μοτίβο σχεδίασης. Χρησιμοποιείται σε περιπτώσεις όπου, κατά την εκτέλεση του προγράμματος, ένα αντικείμενο ... Wikipedia

Πριν διαβάσετε, διαβάστε τις ακόλουθες συμβάσεις και έννοιες. Αυτό το άρθρο ενημερώνεται με κάποια συχνότητα, οπότε αν το έχετε διαβάσει πριν, δεν είναι γεγονός ότι τα δεδομένα δεν έχουν αλλάξει.

Προσαρμογέαςανήκουν στην τάξη κατασκευαστικόςμοτίβα. Χρησιμοποιείται για τη μετατροπή μιας διεπαφής σε μια άλλη που απαιτείται από τον πελάτη. Ο προσαρμογέας διασφαλίζει τη συμβατότητα μη συμβατών διεπαφών εφαρμόζοντας ένα επίπεδο.

Αρχή λειτουργίας

Ο προσαρμογέας κληρονομεί τη διεπαφή προορισμού με ανοιχτό τρόπο (ας το ονομάσουμε Στόχος), και μια προσαρμόσιμη διεπαφή κλειστού τρόπου ( Προσαρμοστής). Κατά την υλοποίηση των μεθόδων διεπαφής προορισμού, τα αιτήματα ανακατευθύνονται (ανατίθενται) σε μια κλάση με προσαρμόσιμη διεπαφή

Παράδειγμα

// Διεπαφή στόχου, ο πελάτης μπορεί να εργαστεί μόνο με αυτήν τη διεπαφή iTarget ( ερώτημα δημόσιας λειτουργίας(); ) // Προσαρμόσιμη διεπαφή. Ο υπολογιστής-πελάτης δεν ξέρει πώς να εργαστεί με αυτό, αλλά θέλει πραγματικά τη διεπαφή iAdaptee ( αίτημα δημόσιας λειτουργίας(); ) // Μια κλάση που υλοποιεί μια προσαρμόσιμη κλάση διεπαφής Το Adaptee υλοποιεί το iAdaptee ( αίτημα δημόσιας λειτουργίας() ( return __CLASS__ . ":: " . __METHOD__; ) ) class Adapter υλοποιεί το iTarget ( προστατευμένο $adaptee = null; δημόσια συνάρτηση __construct() ( $this -> adaptee = new Adaptee(); ) public function query() ( return $this -> adaptee -> request (); ) ) $ Target = νέος προσαρμογέας(); print $Target -> query(); // "Adaptee::request"

συμπέρασμα

Ένας προσαρμογέας μπορεί να προσαρμόσει πολλές διεπαφές σε μία ταυτόχρονα· αυτό το μοτίβο ονομάζεται προσαρμογέας αντικειμένουΗ χρήση αυτού του προτύπου δικαιολογείται σε αρκετές περιπτώσεις. Εάν θέλετε να χρησιμοποιήσετε μια υπάρχουσα τάξη με διαφορετική διεπαφή. Εάν πρόκειται να χρησιμοποιήσετε την προσαρμόσιμη διεπαφή σε πολλά σημεία και δεν έχετε την ευκαιρία να την κάνετε να φαίνεται ίδια παντού, τότε η χρήση αντικαταστάσιμων προσαρμογέων μπορεί να είναι καλή ιδέα.

Σκοπός του μοτίβου προσαρμογέα

Συχνά σε καινούργια έργο λογισμικούΔεν είναι δυνατή η επαναχρησιμοποίηση του υπάρχοντος κώδικα. Για παράδειγμα, οι υπάρχουσες κλάσεις μπορεί να έχουν την επιθυμητή λειτουργικότητα, αλλά να έχουν μη συμβατές διεπαφές. Σε τέτοιες περιπτώσεις, θα πρέπει να χρησιμοποιήσετε το μοτίβο του προσαρμογέα.

Το μοτίβο προσαρμογέα, το οποίο είναι ένα περιτύλιγμα λογισμικού πάνω από υπάρχουσες κλάσεις, μετατρέπει τις διεπαφές τους σε μια μορφή κατάλληλη για μεταγενέστερη χρήση.

Ας δούμε ένα απλό παράδειγμα για το πότε πρέπει να χρησιμοποιείται το μοτίβο του προσαρμογέα. Ας αναπτύξουμε ένα σύστημα ελέγχου κλιματισμού σχεδιασμένο να διατηρεί αυτόματα τη θερμοκρασία περιβάλλοντος εντός καθορισμένων ορίων. Σημαντικό συστατικόΈνα τέτοιο σύστημα είναι ένας αισθητήρας θερμοκρασίας, με τον οποίο μετράται η θερμοκρασία περιβάλλοντος για μεταγενέστερη ανάλυση. Για αυτόν τον αισθητήρα υπάρχει ήδη έτοιμος λογισμικόαπό τρίτους προγραμματιστές, που είναι μια κατηγορία με την κατάλληλη διεπαφή. Ωστόσο, δεν μπορείτε να χρησιμοποιήσετε αυτήν την κατηγορία απευθείας, καθώς οι μετρήσεις του αισθητήρα λαμβάνονται σε βαθμούς Φαρενάιτ. Χρειάζεστε έναν προσαρμογέα που μετατρέπει τη θερμοκρασία σε Κελσίου.

Τα κοντέινερ ουράς, priority_queue και στοίβας της τυπικής βιβλιοθήκης προτύπων STL υλοποιούνται με βάση τη διαδοχική λίστα, τα δοχεία deque και τα διανύσματα, προσαρμόζοντας τις διεπαφές τους στην επιθυμητή μορφή. Γι' αυτό τα δοχεία αυτά ονομάζονται δοχεία προσαρμογής.

Περιγραφή του μοτίβου του προσαρμογέα

Αφήστε την κλάση της οποίας η διεπαφή πρέπει να προσαρμοστεί στην επιθυμητή φόρμα να ονομάζεται Adaptee. Για να λύσει το πρόβλημα του μετασχηματισμού της διεπαφής του, το μοτίβο του προσαρμογέα εισάγει την ακόλουθη ιεραρχία κλάσεων:

  • Στοχεύστε την εικονική βασική κλάση. Ανακοινώθηκε εδώ διεπαφή χρήστηκατάλληλος τύπος. Μόνο αυτή η διεπαφή είναι διαθέσιμη στον χρήστη.
  • Μια παραγόμενη κλάση προσαρμογέα που υλοποιεί τη διεπαφή Target. Αυτή η κλάση περιέχει επίσης έναν δείκτη ή μια αναφορά σε μια παρουσία Adaptee. Το μοτίβο προσαρμογέα χρησιμοποιεί αυτόν τον δείκτη για να προωθήσει κλήσεις πελάτη στον προσαρμογέα. Δεδομένου ότι οι διεπαφές Adaptee και Target δεν είναι συμβατές μεταξύ τους, αυτές οι κλήσεις συνήθως απαιτούν μετατροπή.

Εφαρμογή του μοτίβου προσαρμογέα

Κλασική υλοποίηση του μοτίβου Adapter

Εδώ είναι μια υλοποίηση του μοτίβου προσαρμογέα. Για το παραπάνω παράδειγμα, προσαρμόζουμε τις ενδείξεις του αισθητήρα θερμοκρασίας του συστήματος ελέγχου κλιματισμού, μετατρέποντάς τις από βαθμούς Φαρενάιτ σε βαθμούς Κελσίου (υποτίθεται ότι ο κωδικός για αυτόν τον αισθητήρα δεν είναι διαθέσιμος για τροποποίηση).

#περιλαμβάνω // Ήδη υπάρχουσα κλάση κλάσης αισθητήρα θερμοκρασίας περιβάλλοντος FahrenheitSensor ( δημόσια: // Λήψη μετρήσεων θερμοκρασίας σε Fahrenheit float getFahrenheitTemp() ( float t = 32.0; // ... επιστρέφει κάποιος κωδικός t; ) ); class Sensor ( public: virtual ~Sensor() () virtual float getTemperature() = 0; ); class Adapter: public Sensor ( public: Adapter(FahrenheitSensor* p) : p_fsensor(p) ( ) ~Adapter() (delete p_fsensor; ) float getTemperature() ( return (p_fsensor->getFahrenheitTemp()-32.0)*5. ; ) ιδιωτικό: FahrenheitSensor* p_fsensor; ); int main() ( Sensor* p = new Adapter(new FahrenheitSensor); cout<< "Celsius temperature = " << p->getTemperature()<< endl; delete p; return 0; }

Εφαρμογή του μοτίβου προσαρμογέα με βάση την κλειστή κληρονομικότητα

Αφήστε τον αισθητήρα θερμοκρασίας του συστήματος ελέγχου κλιματισμού να υποστηρίζει τη λειτουργία ρύθμισης για πιο ακριβείς μετρήσεις. Αυτή η συνάρτηση δεν απαιτείται να χρησιμοποιηθεί, γι' αυτό πιθανώς η αντίστοιχη μέθοδος adjust() δηλώνεται προστατευμένη από τους προγραμματιστές στην υπάρχουσα κλάση FahrenheitSensor.

Το σύστημα που αναπτύσσουμε πρέπει να υποστηρίζει την προσαρμογή των μετρήσεων. Εφόσον η πρόσβαση σε μια προστατευμένη μέθοδο μέσω δείκτη ή συνδέσμου απαγορεύεται, η κλασική εφαρμογή του μοτίβου προσαρμογέα δεν είναι πλέον κατάλληλη εδώ. Η μόνη λύση είναι η κληρονομιά από την κλάση FahrenheitSensor. Η διεπαφή αυτής της κλάσης πρέπει να παραμείνει απρόσιτη για τον χρήστη, επομένως η κληρονομιά πρέπει να είναι ιδιωτική.

Οι στόχοι που επιδιώκονται κατά τη χρήση ανοιχτής και κλειστής κληρονομιάς είναι διαφορετικοί. Ενώ η ανοιχτή κληρονομικότητα χρησιμοποιείται για κληρονομικότητα διεπαφής και υλοποίησης, η κλειστή κληρονομικότητα χρησιμοποιείται μόνο για κληρονομικότητα υλοποίησης.

#περιλαμβάνω κλάση FahrenheitSensor ( public: float getFahrenheitTemp() ( float t = 32.0; // ... return t; ) protected: void adjust() () // Προσαρμογή του αισθητήρα (προστατευμένη μέθοδος) ); class Sensor ( public: virtual ~Sensor() () virtual float getTemperature() = 0; virtual void adjust() = 0; ); Προσαρμογέας κλάσης: δημόσιος αισθητήρας, ιδιωτικός αισθητήρας Fahrenheit ( δημόσιος: Adapter() ( ) float getTemperature() ( return (getFahrenheitTemp()-32.0)*5.0/9.0; ) void adjust() ( FahrenheitSensor::adjust(); )); int main() ( Sensor * p = new Adapter(); p->adjust(); cout<< "Celsius temperature = " << p->getTemperature()<< endl; delete p; return 0; }

Αποτελέσματα εφαρμογής του μοτίβου προσαρμογέα

Πλεονεκτήματα του μοτίβου προσαρμογέα

  • Το μοτίβο προσαρμογέα σάς επιτρέπει να επαναχρησιμοποιήσετε τον υπάρχοντα κώδικα προσαρμόζοντας τη μη συμβατή διεπαφή του σε μια χρησιμοποιήσιμη μορφή.

Μειονεκτήματα του μοτίβου προσαρμογέα

  • Το έργο της μετατροπής διεπαφών μπορεί να είναι δύσκολο εάν οι κλήσεις του πελάτη και/ή οι παραμέτρους που έχουν περάσει δεν έχουν λειτουργική αντιστοιχία στο αντικείμενο που προσαρμόζεται.

Γεια σε όλους! Σήμερα θα μιλήσουμε για Μοτίβο σχεδίασης προσαρμογέα μοτίβων. Όπως υποδηλώνει το όνομα, χρησιμεύει για να εξασφαλίσει ότι κάτι προσαρμόζω, αλλά τί? Και αυτό το άρθρο θα σας απαντήσει σε αυτήν την ερώτηση.

Περιγραφή του σχεδίου του προσαρμογέα

Ας απομακρυνθούμε λίγο από τον προγραμματισμό και ας δούμε προσαρμογείςστην πραγματική ζωή. Για παράδειγμα, αγοράσατε κάποιο εξοπλισμό (για παράδειγμα, έναν υπολογιστή) στο εξωτερικό. Έχοντας φτάσει στο σπίτι με αυτό, ανακαλύψατε ότι το βύσμα διαφορετικού προτύπου δεν ταιριάζει στη ρωσική μας πρίζα. Τι να κάνω? Σωστά! Πρέπει να πάτε στο κατάστημα και να αγοράσετε προσαρμογέας, χρησιμοποιώντας το οποίο μπορείτε να συνδέσετε τον υπολογιστή σας στο δίκτυο. Αυτό λοιπόν προσαρμογέαςκαι υπάρχει προσαρμογέας. Τοποθετούμε ένα ξένο βύσμα σε αυτό και συνδέουμε τον ίδιο τον προσαρμογέα στο δίκτυο και όλα λειτουργούν τέλεια. Εκείνοι. εξυπηρετεί απλά στρώμαμεταξύ της πρίζας μας και του ξένου βύσματος.

Οπότε νομίζω ότι το κατάλαβες τι είναι ένας προσαρμογέαςστη ζωή. Στον προγραμματισμό είναι το ίδιο.

Παράδειγμα υλοποίησης προσαρμογέα σε PHP

διεπαφή iMain (
δημόσια συνάρτηση send();
}

Διεπαφή iAdaptee (
έρευνα δημόσιας λειτουργίας();
}

Το Class Adaptee υλοποιεί το iAdaptee (
έρευνα δημόσιας λειτουργίας() (
επιστροφή __ΤΑΞΗ__."::".__METHOD__;
}
}

Ο προσαρμογέας κλάσης υλοποιεί το iMain (
προστατευμένο $adaptee = null;

Δημόσια συνάρτηση __construct() (
$this->adaptee = new Adaptee();
}

Δημόσια συνάρτηση send() (
return $this->adaptee->inquiry();
}
}

$goal = νέος προσαρμογέας();
echo $goal->send(); // "Adaptee::inquiry"
?>

Να λοιπόν ο κωδικός μας. Ας το καταλάβουμε. Έχουμε μια διεπαφή iMain, ο κωδικός πελάτη μπορεί να λειτουργήσει μαζί του. Στη συνέχεια έχουμε τη διεπαφή iAdaptee, με το οποίο ο κώδικας πελάτη δεν μπορεί να λειτουργήσει, αλλά πρέπει να αλληλεπιδράσουμε με κάποιο τρόπο μαζί του. Μετά έχουμε τάξη Προσαρμοστής iAdapteeκαι μέσα έχει μια μέθοδο που ονομάζεται έρευνα, το οποίο απλώς επιστρέφει μια συμβολοσειρά σαν ΤΑΞΗ::ΜΕΘΟΔΟΣ. Εδώ ερχόμαστε στην τάξη Προσαρμογέας, το οποίο κληρονομεί τη διεπαφή iMain. Μέσα σε αυτό δημιουργούμε μια προστατευόμενη ιδιοκτησία προσαρμοσμένος, ίσος μηδενικό. Στη συνέχεια, στον κατασκευαστή δημιουργούμε ένα αντικείμενο κλάσης Προσαρμοστήςκαι να το γράψουμε στην προστατευόμενη περιουσία μας. Στη μέθοδο στείλετεεπιστρέφουμε την κλήση μεθόδου έρευνα.

Αυτό είναι όλο. Τώρα δημιουργούμε το αντικείμενο του προσαρμογέα μας και καλούμε τη μέθοδο στείλετε.

Εκείνοι. Το όλο θέμα είναι ότι μπορούμε να δουλέψουμε με μια διεπαφή, αλλά δεν μπορούμε με μια άλλη, και για να αλληλεπιδράσουμε με κάποιο τρόπο με αυτήν τη διεπαφή που είναι απρόσιτη σε εμάς, δημιουργούμε προσαρμογέας, ένα επίπεδο μέσω του οποίου υλοποιούμε την εργασία μας.

συμπέρασμα

Τώρα μπορεί να σας φαίνεται ότι όλα είναι πολύ περίπλοκα και δύσκολα, αλλά δεν είναι έτσι. Νομίζω ότι καταλαβαίνετε την έννοια του προσαρμογέα, αλλά τώρα χρειάζεστε περισσότερη εξάσκηση. Ρίξτε ξανά μια ματιά στον κώδικα που δίνεται σε αυτό το άρθρο και προσπαθήστε να τον κατανοήσετε. Περάστε το γραμμή προς γραμμή και απαγγείλτε το σαν να είστε διερμηνέας php. Επίσης, σας συμβουλεύω να δείτε τον κώδικα κάποιου πλαισίου, επειδή αυτό το πρότυπο χρησιμοποιείται εκεί αρκετά συχνά.

Αυτό ολοκληρώνει αυτό το αρκετά μεγάλο άρθρο, σας ευχαριστώ για την προσοχή σας!