Ի՞նչ է 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) { // Նորից ստուգում null-ի համար 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; } } }Առավելություն՝ բազմակողմանի անվտանգություն և մերժված ինիցիալիզացիա՝ տուփից դուրս, ավելի մաքուր կոդ:
Առավելություններ՝
- Կառավարում է օրինակների քանակը
- Գլոբալ մուտք
- Մերժված ինիցիալիզացիա
Նորություններ՝
- Կարող է խախտել միակ պատասխանատվության սկզբունքը
- Կրկնվող թեստավորման դժվարություն
- Կարող է հանգեցնել կոդի խիստ կապվածության