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

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

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

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

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

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

  1. Επιστρέψτε το μηδέν ή ρίξτε μια εξαίρεση
  2. Αποκλεισμός της κλήσης έως ότου ένα αντικείμενο είναι διαθέσιμο
  3. Αυξήστε το μέγεθος της πισίνας για να φιλοξενήσετε περισσότερα αντικείμενα

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

Δημιουργία μιας κοινής ομάδας αντικειμένων στο C #

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

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

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

δημόσια τάξη ObjectPool όπου T: νέο ()

    {

ιδιωτικά στοιχεία ανάγνωσης ConcurrentBag = νέο ConcurrentBag ();

ιδιωτικός μετρητής int = 0;

ιδιωτικό int MAX = 10;

δημόσια άδεια κυκλοφορίας (στοιχείο Τ)

        {

//ΝΑ ΚΑΝΩ

        }

δημόσια T Λήψη ()

        {

//ΝΑ ΚΑΝΩ

        }

    }

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

δημόσια T Λήψη ()

        {

Τ στοιχείο;

εάν (αντικείμενα.TryTake (στοιχείο έξω))

            {

μετρητής-;

Επιστροφη αντικειμενου;

            }

αλλού

            {

T obj = νέο T ();

αντικείμενα. Προσθήκη (obj);

μετρητής ++;

επιστροφή obj;

            }

        }

ο ΜΕΓΙΣΤΗ η ακέραια μεταβλητή είναι κωδικοποιημένη εδώ, αλλά μπορείτε να την ρυθμίσετε. Αυτή η τάξη δεν είναι σφραγισμένη ή στατική, οπότε μπορείτε να την επεκτείνετε όπως θέλετε.

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

δημόσια άκυρη κυκλοφορία (στοιχείο Τ)

        {

εάν (μετρητής <MAX)

            {

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

μετρητής ++;

            }           

        }

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

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

        {

ObjectPool objPool = νέο ObjectPool ();

MyClass obj = objPool.Get ();

objPool.Release (obj);

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

        }

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

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