Τι είναι το μοτίβο σχεδίασης Singleton;
sobes.tech AI
Απάντηση από AI
Το μοτίβο Singleton διασφαλίζει ότι μια κλάση έχει μόνο μία παρουσία και παρέχει μια παγκόσμια πρόσβαση σε αυτή.
Χρησιμοποιείται όταν απαιτείται μια μοναδική παρουσία πόρου, π.χ.:
- Διαχειριστής διαμόρφωσης
- Πισίνα συνδέσεων βάσης δεδομένων
- Καταγραφέας (logger)
Εφαρμογές:
-
Αργή αρχικοποίηση (Lazy Initialization): Η παρουσία δημιουργείται κατά την πρώτη πρόσβαση.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Ιδιωτικός κατασκευαστής public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Στατική αρχικοποίηση (Eager Initialization): Η παρουσία δημιουργείται κατά τη φόρτωση της κλάσης.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Ιδιωτικός κατασκευαστής public static Singleton Instance { get { return instance; } } }Πλεονέκτημα: προεπιλεγμένη ασφάλεια σε πολλαπλά νήματα, πιο απλή υλοποίηση. Μειονέκτημα: η παρουσία δημιουργείται ακόμη και αν δεν χρησιμοποιείται.
-
Με
Lazy<T>:.NET Framework παρέχει ενσωματωμένη υποστήριξη για αργή αρχικοποίηση.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Ιδιωτικός κατασκευαστής public static Singleton Instance { get { return lazyInstance.Value; } } }Πλεονέκτημα: ασφάλεια σε πολλαπλά νήματα και έτοιμη αργή αρχικοποίηση, πιο καθαρός κώδικας.
Πλεονεκτήματα του Singleton:
- Έλεγχος στον αριθμό των παραδειγμάτων.
- Παγκόσμια πρόσβαση.
- Αργή αρχικοποίηση (σε ορισμένες υλοποιήσεις).
Μειονεκτήματα του Singleton:
- Μπορεί να παραβιάσει την αρχή της μοναδικής ευθύνης.
- Δυσκολεύει τη μονάδα δοκιμών.
- Μπορεί να οδηγήσει σε ισχυρή συσχέτιση κώδικα.