Junior
Паттерни тарҳи Singleton чист?
sobes.tech AI
Ҷавоб аз AI
Паттерн Singleton кафолат медиҳад, ки дар класа танҳо як намуна вуҷуд дорад ва дастрасии глобалӣ ба он медиҳад.
Ин вақте истифода мешавад, ки як намунаи ягонаи манбаъ лозим аст, масалан:
- Менеджери конфигуратсия
- Пул барои пайвастшавӣ ба базаи додаҳо
- Логгер
Иҷроҳо:
-
Инициализатсияи бефосила (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 { // Санҷиши null имкон медиҳад, ки аз бастани бехатарӣ дар бештар ҳолатҳо худдорӣ шавад 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:
- Назорат дар шумораи намунаҳо.
- Нуқтаи дастрасии глобалӣ.
- Ленивой инициализатсия (дар баъзе реализацияҳо).
Норасоиҳо:
- Мумкин аст принсипи масъулияти ягонаро вайрон кунад.
- Таҳлилро душвор мекунад.
- Мумкин аст ба пайвастагии қавии коди оварда расонад.