Bonjour,
Je remarque que systématiquement, lorsqu'on parle de design pattern à propos de C#, on a :
- La méthode non thread safe qui demande de la programmation
- La méthode thread safe qui demande encore plus de programmation
En revanche, pour ainsi dire jamais, on ne trouve la méthode qui ne nécessaire pas de programmation : le constructeur static.
Pourquoi cette solution (que je trouve bien plus élégante) est-elle systématiquement mise de côté ?
D'un point de vue performances, je ne vois pas de problème.
De plus, comme l'illustre mon exemple, le constructeur est appeler le plus tard possible, c'est à dire que dans l'hypothèse où on ne se sert pas du singleton, on n'exécute jamais son code, ce qui est tout de même appréciable je trouve, par rapport aux solutions habituelles... non ?
Sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 using System; namespace TestSingleton { class Program { static void Main(string[] args) { Console.WriteLine("Ajout de 'aaaa' au Singleton"); Singleton.UpdateVal("aaaa"); Console.WriteLine("Ajout de 'bbbb' au Singleton"); Singleton.UpdateVal("bbbb"); Console.WriteLine("Récupération de la valeur du Singleton"); Console.WriteLine(Singleton.GetVal()); Console.WriteLine("Appuyez sur une touche pour terminer..."); Console.ReadKey(true); } } static class Singleton { static private string val; static Singleton() { Console.WriteLine("Valeur initiale du Singleton ?"); val = Console.ReadLine(); } public static string GetVal() { return val; } public static string UpdateVal(string v) { val = val + " " + v; return val; } } }
Cette solution est pourtant je trouve bien mieux d'un point de vue sémantique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Ajout de 'aaaa' au Singleton Valeur initiale du Singleton ? xxxx Ajout de 'bbbb' au Singleton Récupération de la valeur du Singleton xxxx aaaa bbbb Appuyez sur une touche pour terminer...
Là où la méthode traditionnelle nous oblige à utiliser une instance de quelque-chose de statique, la méthode ci-dessus permet d'utiliser directement des méthodes statiques, sans devoir instancier le moindre objet. Sémantiquement, on est donc en présence d'un véritable singleton, et non d'une simulation de singleton...
Partager