Le pattern singleton est l'un des pattern les mieux connu en ingénierie informatique. Une singleton est une classe qui ne permet qu'une seule instance d'elle même. Et pourtant, en lisant cet article, vous pourriez être surpris ...
UML Class diagram Singleton |
Avec un article général sur ce pattern :
http://csharpindepth.com/Articles/General/Singleton.aspx
Article traduit par Jérôme Lambert sur développez.com :
http://jlambert.developpez.com/tutoriels/dotnet/implementation-pattern-singleton-csharp/
Ce sujet permet d'aborder un certain nombre de problématiques pointues comme le "thread-safe", l'initialisation des variables statiques ... Qui sont des problématiques systèmes, à résoudre absolument si l'on veut développer une application.
Finalement, la solution 4 est :
"Sealed" c'est pour sceller la Class qu'une autre Class ne puisse pas en hériter...
C'est la seule écriture qui résout la problématique du Singleton en C# :
public
sealed
class
Singleton
{
private
static
readonly
Singleton instance =
new
Singleton
();
//
Explicit
static
constructor
to
tell
C#
compiler
//
not
to
mark
type
as
beforefieldinit
static
Singleton
()
{
}
//
This constructor to tell C# compiler to do not
//
create default public constructor
private
Singleton
(){
}
public
static
Singleton Instance
{
get
{
return
instance;
}
}
}
Et voici un exemple de ce qu'il ne faut pas écrire :
//
Bad
code!
Do
not
use!
public
sealed
class
Singleton
{
private
static
Singleton instance=
null
;
private
Singleton
()
{
}
public
static
Singleton Instance
{
get
{
if
(instance=
=
null
)
{
instance =
new
Singleton
();
}
return
instance;
}
}
}
C'est assez aberrant de constater combien d'encre à fait couler cette simple spécification de déclarer une variable unique pour tout le programme... mais les affres du C# sont impénétrables et insondables. C'est en pratiquant que l'on acquiert l'expérience nécessaire à l'écriture de "bons programmes".
N'hésitez pas à commenter, à liker...