Προγραμματισμός

Εργασία με το μοτίβο σχεδιασμού προσαρμογέα

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

Το μοτίβο προσαρμογέα είναι ένα δομικό σχέδιο που λειτουργεί ως γέφυρα μεταξύ δύο διεπαφών που δεν είναι συμβατές. Ο όρος "Προσαρμογέας" χρησιμοποιείται για να αντιπροσωπεύσει ένα αντικείμενο που επιτρέπει σε δύο αμοιβαία ασύμβατες διεπαφές να επικοινωνούν και να συνεργάζονται. Στην ουσία, το μοτίβο προσαρμογέα επιτρέπει σε τάξεις (που έχουν ασύμβατες διασυνδέσεις) να συνεργάζονται και τα αντικείμενά τους επικοινωνούν, εάν χρειάζεται.

Υπάρχουν ορισμένοι τύποι προσαρμογέων που εφαρμόζουν τις διεπαφές τόσο του Target όσο και του Adaptee. Αυτοί οι τύποι προσαρμογέα είναι γνωστοί ως αμφίδρομοι προσαρμογείς. Έχετε επίσης δύο διαφορετικούς τύπους προσαρμογέων, συγκεκριμένα, Adapters Class και Object Adapters. Ενώ ο πρώτος χρησιμοποιεί κληρονομιά, ο δεύτερος χρησιμοποιεί σύνθεση για να διορθώσει ζητήματα ασυμβατότητας στα σχέδιά σας. Μπορείτε να χρησιμοποιήσετε το μοτίβο σχεδιασμού προσαρμογέα όταν πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη τρίτων που δεν είναι συμβατή με τους τύπους που έχετε στην εφαρμογή σας.

Ακολουθεί η λίστα των τύπων που συμμετέχουν σε μια τυπική εφαρμογή του μοτίβου προσαρμογέα:

  • Στόχος
  • Προσαρμογέας
  • Adaptee
  • Πελάτης

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

Αυτό το μοτίβο εμπίπτει στην κατηγορία δομής αφού θα χρησιμοποιούσατε αυτό το μοτίβο για τη δομή των τύπων στην εφαρμογή μας - συνήθως αυτό το μοτίβο μπορεί να μετατρέψει τη μία διεπαφή σε μια άλλη. Η συμμορία των τεσσάρων ορίζει το μοτίβο προσαρμογέα ως "Μετατροπή της διεπαφής μιας κλάσης σε μια άλλη διεπαφή που περιμένουν οι πελάτες. Ο προσαρμογέας επιτρέπει σε τάξεις να συνεργάζονται που δεν θα μπορούσαν διαφορετικά να είναι διαφορετικά λόγω ασυμβίβαστων διεπαφών."

Ας σκάψουμε τώρα κάποιο κωδικό. Εξετάστε τις ακόλουθες δύο τάξεις.

δημόσια τάξη TargetA

            {

δημόσιο κενό DisplayA ()

                {

Console.WriteLine ("TargetA");

                }

            }

δημόσια τάξη TargetB

            {

δημόσιο κενό DisplayB ()

                {

Console.WriteLine ("TargetB");

                }

            }

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

δημόσια διεπαφή ITargetAdapter

            {

άκυρο ProcessData ();

            }

δημόσιος κλάδος AdapterA: ITargetAdapter

            {

δημόσιο TargetA targetA {get; σειρά; }

Διαδικασία κενού δημοσίου ()

                 {

targetA.DisplayA ();

                 }

δημόσιο AdapterA (TargetA obj)

                 {

targetA = obj;

                 }

            }

Προσαρμογέας δημόσιας τάξης B: Προσαρμογέας ITarget

            {

δημόσιο TargetB targetB {get; σειρά; }

Διαδικασία κενού δημοσίου () {targetB.DisplayB (); }

δημόσιο AdapterB (TargetB obj)

                 {

targetB = obj;

                 }

            }

Σημειώστε ότι και οι δύο τάξεις προσαρμογέα έχουν μια κοινή διεπαφή που ονομάζεται ITargetAdapter που εφαρμόζουν αυτές οι κλάσεις. Κάθε μία από τις δύο τάξεις προσαρμογέα έχει έναν κατασκευαστή ορίσματος που δέχεται μια αναφορά σε ένα αντικείμενο των αντίστοιχων κλάσεων στόχων. Η διεπαφή ITargetAdapter περιέχει τη δήλωση της μεθόδου Process (). Αυτή η μέθοδος εφαρμόζεται και από τις τάξεις προσαρμογέα - αυτές οι μέθοδοι επικαλούνται το Display () και τις αντίστοιχες μεθόδους εμφάνισης των τάξεων στόχων που εφαρμόσαμε νωρίτερα.

Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να χρησιμοποιήσετε αυτές τις τάξεις προσαρμογέα.

Πρόγραμμα τάξης

    {

static void Main (συμβολοσειρά [] args)

        {

ITargetAdapter adapter = νέο AdapterA (νέο TargetA ());

προσαρμογέα. Διαδικασία ();

adapter = νέο AdapterB (νέο TargetB ());

προσαρμογέα. Διαδικασία ();

Κονσόλα. Διαβάστε ();

        }

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

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