Depuis peu retour en Delphi !
Après un passage en C++Buider 2007, XE2 et XE3
Je reprends du Delphi XE2 et je découvre les nouveautés que je n'avais pas en Delphi 7 !
M'étant habitué au Template du C++, je me suis lancé dans les génériques !
Dans la société ou je travaille, j'ai trouvé une Pattern singleton utilisant les génériques, dommage que l'auteur d'origine Moritz Beutel n'ait pas été mentionné dans le code de mon prédécesseur
De la façon qu'elle a été utilisé, il était d'une grande simplicité de créer plusieurs singletons !
BiduleSingleton et BiduleDoublon sont des variables globales, c'est la syntaxe non OO comme pour Printer()
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3var BiduleSingleton : TSingletonInstance<TBidule>; BiduleDoublon : TSingletonInstance<TBidule>;
Dommage, il existe aujourd'hui les class property et class var autant s'en servir !
Pour ma part, je préfère écrire dans mon TBidule.Instance.Propriété...
De plus, il n'y a RIEN dans le code de TBidule que l'on doit l'utiliser comme Singleton, donc rien empêche que l'on fasse des Create !
Au passage, j'ai donc expérimenté une nouveauté pour moi, les class constructor !
Et l'Astuce pour masquer le constructeur Create en m'inspirant de la proposition de yanniel !
Voici le code de la Pattern (j'ai prévu d'en faire d'autres)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
une Utilisation simpliste :
Comme c'est au niveau de la classe que cela gère l'instance du Singleton, il est plus difficile de le contourner en jouant juste sur plusieurs déclarations du même template
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Mais rien n'empêche d'appeler le constructor Create de TBidule !
De plus, la syntaxe est pour le moment, il est possible de faire une encapsulation dans TBidule pour obtenir
Code : Sélectionner tout - Visualiser dans une fenêtre à part TBiduleSingleton.Instance.Propriété
Code : Sélectionner tout - Visualiser dans une fenêtre à part TBidule.Instance.PropriétéVoilà, cela ne sert pas à grand chose mais cela m'a fait découvrir des éléments inconnus
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
Je trouve le class constructor et class destructor plus élégant des sections initialization et finalization

 

 
		
		 
         
 

 
			
			


 
			 
   
 


 Design Pattern : Singleton - Découverte des Génériques et Class Constructor
 Design Pattern : Singleton - Découverte des Génériques et Class Constructor
				 
 
 Répondre avec citation
  Répondre avec citation
Partager