Συχνά έχουμε τέτοια σύγχυση στον προγραμματισμό, ορισμένες συναρτήσεις επιλύονται χρησιμοποιώντας singletons και ορισμένες συναρτήσεις επιλύονται χρησιμοποιώντας στατικές μεθόδους, οπότε ποιες είναι οι αρχές και τα σενάρια χρήσης των στατικών μεθόδων και των singletons; Ας ξεκαθαρίσουμε αυτό το θέμα σήμερα.
1. Ας δούμε πρώτα τη διαφορά μεταξύ στατικών και μη στατικών μεθόδων;
Πολλοί προγραμματιστές έχουν αυτή την κατανόηση ότι οι στατικές μέθοδοι φορτώνονται πρώτα, οι μη στατικές μέθοδοι φορτώνονται αργότερα, οι στατικές μέθοδοι θα υπάρχουν πάντα στη μνήμη και οι μη στατικές μέθοδοι όχι. Επομένως, συνιστάται η χρήση μη στατικής μεθόδου. Πρώτα απ 'όλα, είναι λάθος να τονίσουμε ότι αυτή η κατανόηση είναι λάθος.
Πρώτα απ 'όλα, ας αναλύσουμε από τη μνήμη, όταν αρχικοποιείται η εφαρμογή, το CLR (CLR είναι το Common Language Runtime) είναι επίσης ένα περιβάλλον χρόνου εκτέλεσης όπως η εικονική μηχανή Java, η οποία είναι υπεύθυνη για τη διαχείριση πόρων (εκχώρηση μνήμης και συλλογή σκουπιδιών κ.λπ.) και διασφαλίζει τον απαραίτητο διαχωρισμό μεταξύ της εφαρμογής και του υποκείμενου λειτουργικού συστήματος. Το CLR έχει δύο διαφορετικά ονόματα μετάφρασης: το Common Language Runtime και το Common Language Runtime. Εκχωρεί έναν χώρο διευθύνσεων σε κάθε διεργασία στον διαθέσιμο χώρο της διεργασίας, ο οποίος είναι ο διαχειριζόμενος σωρός. Ο διαχειριζόμενος σωρός χωρίζεται σε πολλές περιοχές, οι σημαντικότερες από τις οποίες είναι ο σωρός συλλογής σκουπιδιών (GC Heap) και ο σωρός φορτωτή (Loader Heap), ο οποίος χρησιμοποιείται για την αποθήκευση παρουσιών αντικειμένων και διαχειρίζεται το GC. Οι πιο σημαντικές πληροφορίες που αποθηκεύει το Loader Heap μέσω του πίνακα MethodTable είναι πληροφορίες που σχετίζονται με μεταδεδομένα, όπως βασικοί τύποι, στατικά πεδία, διεπαφές υλοποίησης και όλες οι μέθοδοι. Το Loader Heap δεν δέχεται έλεγχο GC και ο κύκλος ζωής του είναι από τη δημιουργία έως την καταστροφή. Με άλλα λόγια, μόλις φορτωθεί μια κλάση, τόσο οι στατικές όσο και οι μη στατικές μέθοδοι αυτής της κλάσης αποθηκεύονται στον πίνακα MethodTab του Load Heap, χωρίς έλεγχο GC, και όλες βρίσκονται στη μνήμη για την πρώτη φόρτωση.
Ποια είναι η διαφορά μεταξύ μιας στατικής μεθόδου και μιας μη στατικής μεθόδου; Η διαφορά είναι ότι κατά τη δημιουργία ενός αντικειμένου, η στατική μέθοδος έχει μόνο ένα αντίγραφο, ενώ η μη στατική μέθοδος θα αντιγράψει ένα αντίγραφο των πληροφοριών σχετικά με αυτήν την παρουσία στο GC Heap για κάθε νέο νέο αντικείμενο και ταυτόχρονα θα τοποθετήσει το νέο αντικείμενο στη στοίβα. Η διεύθυνση που υποδεικνύεται από τον δείκτη στοίβας είναι η διεύθυνση μνήμης που μόλις αντιγράφηκε στο GC Heap. Επομένως, όσον αφορά την ταχύτητα κλήσης της μεθόδου, οι στατικές μέθοδοι είναι ταχύτερες επειδή οι μη στατικές μέθοδοι πρέπει να δημιουργηθούν και να εκχωρηθεί μνήμη.
Από την άποψη της ιστορίας του προγραμματισμού, σχεδόν όλες οι μέθοδοι πρώιμου δομημένου προγραμματισμού ήταν στατικές μέθοδοι και η εισαγωγή μεθόδων δημιουργίας ήταν θέμα αντικειμενοστρεφούς προγραμματισμού, επομένως η μέθοδος δημιουργίας δεν ήταν να λύσει το πρόβλημα της απόδοσης και της μνήμης λειτουργίας. Είναι να κάνει την ανάπτυξη πιο διαμορφωμένη και αντικειμενοστρεφή.
Από την παραπάνω ανάλυση, μπορεί να εξαχθεί ένα συμπέρασμα: 1. Η στατική μέθοδος και η μη στατική μέθοδος είναι η διάκριση μεταξύ του τρόπου λύσης. 2. Εάν η κληρονομικότητα, ο πολυμορφισμός ή εάν μια μέθοδος δεν έχει καμία σχέση με το αντικείμενο της κλάσης της, θα πρέπει να επιλέξετε μια στατική μέθοδο, όπως μια κλάση εργαλείου.
2. Ποια είναι η διαφορά μεταξύ της μονής λειτουργίας και της στατικής μεθόδου;
Μερικές φορές χρειάζεται να διατηρήσουμε μια πληροφορία στη μηχανική, όπως ορισμένα χαρακτηριστικά διαμόρφωσης που φορτώνονται κατά το χρόνο εκτέλεσης, τα οποία πρέπει να υπάρχουν καθ' όλη τη διάρκεια ζωής της εφαρμογής και είναι δημόσια, επομένως χρειάζεται μόνο ένα αντίγραφο. Αυτή τη στιγμή, θα εξετάσουμε το ενδεχόμενο να χρησιμοποιήσουμε μια απλή ή στατική μέθοδο για τη διατήρηση αυτών των δεδομένων, αλλά αυτή τη στιγμή, αυτά τα δεδομένα λαμβάνονται με αντικειμενοστραφή τρόπο, θα χρησιμοποιήσουμε ένα singleton.
Πρώτον, οι στατικές μέθοδοι βασίζονται σε και τα singletons βασίζονται σε αντικείμενα. Εάν το μοτίβο ανάλυσης βασίζεται σε αντικείμενα, χρησιμοποιήστε ένα μονότονο, διαφορετικά χρησιμοποιήστε μια στατική προσέγγιση. Για παράδειγμα, πρέπει να κληρονομήσετε, να εφαρμόσετε διεπαφές, να καθυστερήσετε την προετοιμασία, να ξαναγράψετε γονικές κ.λπ. για να χρησιμοποιήσετε singletons, δεύτερον, οι στατικές μέθοδοι είναι προσανατολισμένες στη διαδικασία και οι singletons είναι αντικειμενοστρεφείς. Τρίτον, οι μεταβλητές στατικών χαρακτηριστικών δεν θα διαγραφούν από το GC, επομένως τα μεμονωμένα αντικείμενα δεν θα διαγραφούν από το GC και τα αντικείμενα που δημιουργούνται με στατικές μεθόδους θα απελευθερωθούν όταν εκτελεστεί η στατική μέθοδος. |