2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Όταν μια εφαρμογή χρειάζεται να ελέγχει την κοινή χρήση πόρων, να εκτελεί λειτουργίες διαχείρισης παραμέτρων και εγγραφής αρχείων καταγραφής, μια κοινή απαίτηση είναι η χρήση ενός καθολικού σημείου πρόσβασης ώστε το πρόγραμμα να μπορεί να έχει πρόσβαση σε αυτό μέσω αυτού του καθολικού σημείου πρόσβασης ανεξάρτητα από το πού βρίσκεται σχετικές πληροφορίες για παράδειγμα. Για να καλύψουμε αυτή την ανάγκη, μπορούμε να χρησιμοποιήσουμε το Singleton Pattern. Το μοτίβο singleton διασφαλίζει ότι μια κλάση έχει μόνο μία παρουσία και παρέχει ένα παγκόσμιο σημείο πρόσβασης για πρόσβαση σε αυτό το στιγμιότυπο.
Συγκεκριμένα, το μοτίβο singleton παρέχει συνήθως μια στατική μέθοδο (όπως το getInstance()) που επιστρέφει τη μοναδική παρουσία της κλάσης. Εφόσον αυτή η μέθοδος είναι στατική, μπορεί να κληθεί χωρίς να δημιουργηθεί μια παρουσία της κλάσης. Αυτό σημαίνει ότι οποιοσδήποτε κώδικας που έχει πρόσβαση στην κλάση μπορεί να λάβει ένα στιγμιότυπο singleton καλώντας αυτήν τη στατική μέθοδο.
Αυτό το άρθρο θα εισαγάγει λεπτομερώς τις βασικές έννοιες και τα βήματα υλοποίησης του μοτίβου singleton. Μέσα από αυτό το άρθρο, θα μπορείτε να κατανοήσετε πώς λειτουργεί το μοτίβο singleton και να μάθετε πώς να το χρησιμοποιείτε αποτελεσματικά σε πραγματικά έργα.
Για να δώσουμε ένα ενδιαφέρον παράδειγμα, το μοντέλο singleton είναι σαν το φωτοστέφανο του πρωταγωνιστή σε έναν κόσμο anime Ανεξάρτητα από το πώς εξελίσσεται η πλοκή, υπάρχει πάντα μόνο ένας πρωταγωνιστής και όλοι γνωρίζουν ότι είναι ο πυρήνας της ιστορίας. Με αυτόν τον τρόπο, ανεξάρτητα από το πώς εξελίσσεται η ιστορία, όλοι μπορούν να βρουν το ίδιο πρόσωπο για να προχωρήσει η πλοκή.
πλεονέκτημα
Εξασφαλίστε μεμονωμένη παρουσία: Αποφύγετε τη δημιουργία διπλότυπων παρουσιών και εξοικονομήστε πόρους.
παγκόσμιο σημείο πρόσβασης: Βολική καθολική πρόσβαση και απλοποιημένες κλήσεις.
Τεμπέλης αρχικοποίηση: Δημιουργήστε περιπτώσεις κατά παραγγελία για να βελτιώσετε την απόδοση.
έλλειψη
Δύσκολη κλίμακα: Οι κλάσεις Singleton είναι συχνά δύσκολο να επεκταθούν επειδή ο κατασκευαστής είναι ιδιωτικός.
πιθανά προβλήματα απόδοσης: Σε περιβάλλον υψηλής συγχρονισμού, ορισμένες υλοποιήσεις ενδέχεται να έχουν προβλήματα απόδοσης.
Δυσκολία στις δοκιμές: Το μοτίβο singleton μπορεί να κάνει τις δοκιμές δύσκολες επειδή είναι παγκόσμια κατάσταση.
Σύμφωνα με τα χαρακτηριστικά του μοτίβου singleton, τα σενάρια χρήσης του μπορούν να χωριστούν στις ακόλουθες κατηγορίες:
Η υλοποίηση του μοτίβου singleton συνήθως περιλαμβάνει τρία στοιχεία:
- ιδιώτης κατασκευαστής, κάντε τον κατασκευαστή της κλάσης ιδιωτικό, έτσι ώστε το εξωτερικό να μην μπορεί να δημιουργήσει μια παρουσία μέσω της νέας λέξης-κλειδιού.
- Ιδιωτικά στατικά σημεία αναφοράς σε δικό μας παράδειγμα, δημιουργήστε μια στατική μεταβλητή παρουσίας μέσα στην κλάση για να αποθηκεύσετε τη μοναδική παρουσία.
- Δημόσιες στατικές μέθοδοι που επιστρέφουν το δικό τους στιγμιότυπο, παρέχετε μια στατική μέθοδο, έτσι ώστε ο έξω κόσμος να μπορεί να αποκτήσει το μοναδικό παράδειγμα μέσω αυτής της μεθόδου.
Για τη λειτουργία singleton τύπου Hungry, η παρουσία singleton δημιουργείται όταν φορτώνεται η κλάση, η οποία είναι ασφαλής για νήμα επειδή έχει δημιουργηθεί ένα στατικό αντικείμενο κατά τη φόρτωση της κλάσης και η ταχύτητα απόκρισης είναι γρήγορη κατά την κλήση. Το μειονέκτημα είναι επίσης προφανές Η αποδοτικότητα των πόρων δεν είναι υψηλή όσο εκτελούνται άλλες στατικές μέθοδοι της κλάσης ή η κλάση φορτώνεται.
/**
* 饿汉单例模式:在还没有实例化的时候就初始化
*/
public class Hungry {
//1. 开始时就创建实例
private static final Hungry instance=new Hungry();
// 2. 私有化的构造方法
private void hungry() {
}
public static Hungry getInstance() {
// 返回单例名
return instance;
}
}