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

Πώς να χρησιμοποιήσετε το σχέδιο σχεδίασης Memento στο C #

Χρησιμοποιούμε μοτίβα σχεδίασης για την επίλυση κοινών προβλημάτων σχεδίασης και τη μείωση των περιπλοκών στον πηγαίο κώδικα. Το μοτίβο σχεδίασης Memento είναι ένα μοτίβο σχεδιασμού συμπεριφοράς που μπορεί να χρησιμοποιηθεί για την παροχή μιας δυνατότητας αναίρεσης ή επαναφοράς σε μια εφαρμογή ή απλώς για επαναφορά της κατάστασης ενός αντικειμένου σε μια εφαρμογή ιστού ASP.Net, για παράδειγμα. Αποθηκεύοντας την κατάσταση ενός αντικειμένου σε μια εξωτερική τοποθεσία που ονομάζεται Memento, αυτό το μοτίβο επιτρέπει την επαναφορά αυτής της κατάστασης στο αντικείμενο αργότερα. Ας διερευνήσουμε πώς μπορούμε να χρησιμοποιήσουμε το σχέδιο σχεδίασης Memento στο C #.

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

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

Εφαρμογή του μοτίβου Memento

Σε αυτήν την ενότητα θα εφαρμόσουμε το σχέδιο σχεδίασης Memento στο C #. Θα δημιουργήσουμε ένα απλό πρόγραμμα που έχει τρεις κατηγορίες - α Αριθμομηχανή τάξη, α Ενθύμιο τάξη και τον πελάτη, δηλαδή το Κύριος μέθοδος.

Αναφέρομαι στο Αριθμομηχανή τάξη που δίνεται παρακάτω.

  Υπολογιστής δημόσιας τάξης

    {

int αποτέλεσμα?

δημόσια αριθμομηχανή (int i = 0)

        {

αποτέλεσμα = 0;

        }

δημόσιο κενό SetResult (int i = 0)

        {

this.result = 0;

        }

δημόσιο κενό Προσθήκη (int x)

        {

αποτέλεσμα + = x;

        }

δημόσιο κενό αφαίρεσης (int x)

        {

αποτέλεσμα - = x;

        }

δημόσια int GetResult ()

        {

αποτέλεσμα επιστροφής;

        }

δημόσιο Memento CreateMemento ()

        {

Memento memento = νέο Memento ();

memento.SetState (αποτέλεσμα);

επιστροφή ενθύμιο;

        }

δημόσιο άκυρο SaveState (Memento memento)

        {

αποτέλεσμα = memento.GetState ();

        }

    }

Σημειώστε το Δημιουργία Memento και SetMemento μεθόδους στο Αριθμομηχανή τάξη. Ενώ το πρώτο δημιουργεί ένα Momento Για παράδειγμα, το τελευταίο ανακτά την αποθηκευμένη κατάσταση και εκχωρεί την τιμή στη μεταβλητή του αποτελέσματος.

Η τάξη Memento

ο Ενθύμιο η τάξη περιέχει δύο μεθόδους, SetState και GetState. Ενώ το πρώτο χρησιμοποιείται για την αποθήκευση πληροφοριών κατάστασης, το δεύτερο χρησιμοποιείται για την ανάκτηση της αποθηκευμένης κατάστασης.

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

    {

int κατάσταση;

δημόσια int GetState ()

        {

κατάσταση επιστροφής;

        }

δημόσιο κενό SetState (int κατάσταση)

        {

this.state = κατάσταση;

        }

    }

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

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

        {

Αριθμομηχανή αριθμομηχανή = νέα Αριθμομηχανή ();

αριθμομηχανή. Προσθήκη (5);

αριθμομηχανή. Προσθήκη (10);

αριθμομηχανή. Αφαίρεση (10);

Memento checkPoint = calculator.CreateMemento ();

αριθμομηχανή. Προσθήκη (100);

Console.WriteLine ("Η τιμή της μεταβλητής αποτελέσματος είναι:" + calculator.GetResult ());

αριθμομηχανή. SaveState (σημείο ελέγχου);

Console.WriteLine ("Η τιμή της μεταβλητής αποτελέσματος στο πρώτο σημείο ελέγχου είναι:" + calculator.GetResult ());

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

        }

Το πλήρες παράδειγμα του Memento

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

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

    {

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

        {

Αριθμομηχανή αριθμομηχανή = νέα Αριθμομηχανή ();

αριθμομηχανή. Προσθήκη (5);

αριθμομηχανή. Προσθήκη (10);

αριθμομηχανή. Αφαίρεση (10);

Memento checkPoint = calculator.CreateMemento ();

αριθμομηχανή. Προσθήκη (100);

Console.WriteLine ("Η τιμή της μεταβλητής αποτελέσματος είναι:" + calculator.GetResult ());

αριθμομηχανή. SaveState (σημείο ελέγχου);

Console.WriteLine ("Η τιμή της μεταβλητής αποτελέσματος στο πρώτο σημείο ελέγχου είναι:" + calculator.GetResult ());

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

        }

    }

Υπολογιστής δημόσιας τάξης

    {

int αποτέλεσμα?

δημόσια αριθμομηχανή (int i = 0)

        {

αποτέλεσμα = 0;

        }

δημόσιο κενό SetResult (int i = 0)

        {

this.result = 0;

        }

δημόσιο κενό Προσθήκη (int x)

        {

αποτέλεσμα + = x;

        }

δημόσιο κενό αφαίρεσης (int x)

        {

αποτέλεσμα - = x;

        }

δημόσια int GetResult ()

        {

αποτέλεσμα επιστροφής;

        }

δημόσιο Memento CreateMemento ()

        {

Memento memento = νέο Memento ();

memento.SetState (αποτέλεσμα);

επιστροφή ενθύμιο;

        }

δημόσιο κενό SetMemento (Memento memento)

        {

αποτέλεσμα = memento.GetState ();

        }

    }

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

    {

int κατάσταση;

δημόσια int GetState ()

        {

κατάσταση επιστροφής;

        }

δημόσιο κενό SetState (int κατάσταση)

        {

this.state = κατάσταση;

        }

    }

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

$config[zx-auto] not found$config[zx-overlay] not found