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дун артыкчылыктары:
- Экземплярлар санын көзөмөлдөө
- Глобалдуу жетүү чекити
- Ленивую инициализация (кей бир реализацияларда)
Кемчиликтери:
- Жалгыз жоопкерчилик принцибин бузушу мүмкүн
- Бирдиктүү тестирлөөнү кыйындатат
- Коддун катуу байланышына алып келиши мүмкүн.