1
- using System ;
1
+ // EN: Singleton Design Pattern
2
+ //
3
+ // Intent: Ensure that a class has a single instance, and provide a global point
4
+ // of access to it.
5
+ //
6
+ // RU: Паттерн Одиночка
7
+ //
8
+ // Назначение: Гарантирует существование единственного экземпляра класса и
9
+ // предоставляет глобальную точку доступа к нему.
10
+
11
+ using System ;
2
12
3
13
namespace Singleton
4
14
{
5
- class Program
15
+ // EN: The Singleton class defines the `getInstance` method that lets clients
16
+ // access the unique singleton instance.
17
+ //
18
+ // RU: Класс Одиночка предоставляет метод getInstance, который позволяет
19
+ // клиентам получить доступ к уникальному экземпляру одиночки.
20
+ class Singleton
6
21
{
7
- static void Main ( string [ ] args )
22
+ private static Singleton _instance ;
23
+
24
+ private static object _lock = new object ( ) ;
25
+
26
+ private Singleton ( )
27
+ { }
28
+
29
+ // EN: The static method that controls the access to the singleton instance.
30
+ //
31
+ // This implementation let you subclass the Singleton class while keeping
32
+ // just one instance of each subclass around.
33
+ //
34
+ // RU: Статический метод, управляющий доступом к экземпляру одиночки.
35
+ //
36
+ // Эта реализация позволяет вам расширять класс Одиночки,
37
+ // сохраняя повсюду только один экземпляр каждого подкласса.
38
+ public static Singleton getInstance ( )
8
39
{
9
- Client client = new Client ( ) ;
10
- client . ClientCode ( ) ;
40
+ lock ( _lock )
41
+ {
42
+ return _instance ?? ( _instance = new Singleton ( ) ) ;
43
+ }
11
44
}
12
45
}
13
-
46
+
14
47
class Client
15
48
{
16
49
public void ClientCode ( )
17
50
{
51
+ // EN: The client code.
52
+ //
53
+ // RU: Клиентский код.
18
54
Singleton s1 = Singleton . getInstance ( ) ;
19
55
Singleton s2 = Singleton . getInstance ( ) ;
20
56
@@ -29,24 +65,12 @@ public void ClientCode()
29
65
}
30
66
}
31
67
32
- class Singleton
68
+ class Program
33
69
{
34
- private static Singleton instance ;
35
-
36
- private static object obj = new object ( ) ;
37
-
38
- private Singleton ( )
39
- { }
40
-
41
- public static Singleton getInstance ( )
70
+ static void Main ( string [ ] args )
42
71
{
43
- lock ( obj )
44
- {
45
- if ( instance == null )
46
- instance = new Singleton ( ) ;
47
- }
48
-
49
- return instance ;
72
+ Client client = new Client ( ) ;
73
+ client . ClientCode ( ) ;
50
74
}
51
75
}
52
76
}
0 commit comments