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

Εφαρμογή του σχεδίου σχεδίασης Observer στο C #

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

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

Εφαρμογή

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

Το αρχιτεκτονικό σχέδιο MVC (Model View Component) είναι ένα κλασικό παράδειγμα υλοποίησης του σχεδίου σχεδίασης Observer. Το αρχιτεκτονικό μοτίβο MVC χρησιμοποιείται για τη δημιουργία εφαρμογών που είναι χαλαρά συνδεδεμένες, πιο εύκολα στη δοκιμή και τη συντήρηση. Σε μια τυπική εφαρμογή MVC, η προβολή και το μοντέλο αποσυνδέονται μεταξύ τους. Ενώ η προβολή αντιπροσωπεύει τον παρατηρητή, το μοντέλο αντιπροσωπεύει το παρατηρήσιμο αντικείμενο σας.

Εφαρμογή του σχεδίου σχεδίασης Observer

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

  • Θέμα: Αυτό αντιπροσωπεύεται από έναν τύπο που χρησιμοποιείται για τον καθορισμό μιας διεπαφής για την προσάρτηση ή την απόσπαση ενός ή περισσότερων παρατηρητών
  • Σκυρόδεμα Αυτό χρησιμοποιείται για να ειδοποιεί τους παρατηρητές όταν υπάρχει αλλαγή κατάστασης
  • Παρατηρητής: Αυτό αντιπροσωπεύει τον τύπο που πρέπει να ειδοποιηθεί όταν σε περίπτωση αλλαγής
  • ConcreteObserver: Αυτό αντιπροσωπεύει τη συγκεκριμένη εφαρμογή του τύπου παρατηρητή

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

δημόσια αφηρημένη τάξη Θέμα

    {

προστατευμένη Λίστα lstObservers = νέα λίστα ();

προστατευμένο κενό Μητρώο (Παρατηρητής παρατηρητής)

        {

lstObservers.Προσθήκη (παρατηρητής);

        }

προστατευμένο κενό UnRegister (παρατηρητής παρατηρητής)

        {

lstObservers.Remove (παρατηρητής);

        }

προστατευμένο κενό UnRegisterAll ()

        {

foreach (Παρατηρητής παρατηρητών στο lstObservers)

            {

lstObservers.Remove (παρατηρητής);

            }

        }

δημόσιο αφηρημένο κενό Ειδοποίηση ();

    }

δημόσια αφηρημένη τάξη Observer

    {

δημόσια περίληψη κενού Ενημέρωση ();

    }

Τώρα, ανατρέξτε στο απόσπασμα κώδικα που δίνεται παραπάνω. Η κλάση Θέματος περιέχει μια λίστα παρουσιών του Observer και μερικές μεθόδους για να προσθέσετε ή να αφαιρέσετε τους συνδρομητές, δηλ. Παρουσίες της κλάσης Observer. Σημειώστε ότι η μέθοδος ειδοποίησης έχει δηλωθεί αφηρημένη - η κλάση που θα επεκτείνει την κλάση Θέματος πρέπει να παρέχει την αντίστοιχη εφαρμογή για αυτήν τη μέθοδο. Η κλάση Observer περιέχει μόνο μία μέθοδο - τη μέθοδο ενημέρωσης. Έχω κάνει αυτήν την εφαρμογή όσο το δυνατόν πιο απλή.

Η κλάση BlogPost επεκτείνει την κλάση Θέματος και εφαρμόζει τη μέθοδο ειδοποίησης που έχει δηλωθεί ως αφηρημένη στην κλάση Θέματος.

δημόσια τάξη BlogPost: Θέμα

    {

δημόσιο κενό Attach (παρατηρητής παρατηρητής)

        {

// Μπορείτε να γράψετε τη δική σας εφαρμογή εδώ ή να καλέσετε τη βασική έκδοση

base.Register (παρατηρητής);

        }

δημόσιο κενό Detach (παρατηρητής παρατηρητής)

        {

// Μπορείτε να γράψετε τη δική σας εφαρμογή εδώ ή να καλέσετε τη βασική έκδοση

base.UnRegister (παρατηρητής);

        }

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

        {

// Μπορείτε να γράψετε τη δική σας εφαρμογή εδώ ή να καλέσετε τη βασική έκδοση

base.UnRegisterAll ();

        }

δημόσια παράκαμψη άκυρη Ειδοποίηση ()

        {

foreach (Παρατηρητής παρατηρητών στο lstObservers)

            {

observer.Update ();

            }

        }

    }

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

δημόσια τάξη ConcreteObserver: Observer

    {

δημόσια συμβολοσειρά Email

        {

παίρνω; σειρά;

        }

δημόσια παράκαμψη άκυρη Ενημέρωση ()

        {

Console.WriteLine ("Μέσα στη μέθοδο ενημέρωσης ...");

        }

    }

Μπορείτε να μάθετε περισσότερα σχετικά με το σχέδιο σχεδίασης του Observer από αυτόν τον σύνδεσμο.