IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Choix d'implémentation du Pattern Singleton


Sujet :

VB.NET

  1. #1
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut Choix d'implémentation du Pattern Singleton
    Bonsoir,

    Ceci est plutôt une interrogation qu'un réel problème, en faisant des recherches sur le pattern Singleton,
    je me suis retrouvé face à 3 choix possibles qui a priori fonctionnent/sont fonctionnellement équivalents ;
    et en fait je me demande surtout quelles sont leurs différences :
    • si une écriture est à privilégier,
    • si oui dans quels cas (pour tous les cas ?),
    • les qualités/défauts de chaque pour faire court.

    (Notamment en ce qui concerne la 3ème implémentation où je pige pas trop "le truc magique" )

    1ère implémentation: le Singleton "classique"
    Code VB.Net : 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
     
    Public NotInheritable Class Singleton
     
        Private Shared _Instance As Singleton
        Private Shared ReadOnly _SyncRoot As New Object
     
        Private Sub New()
        End Sub
     
        Shared ReadOnly Property Instance As Singleton
            Get
                If IsNothing(_Instance) Then
                    SyncLock _SyncRoot
                        If IsNothing(_Instance) Then
                            _Instance = New Singleton
                        End If
                    End SyncLock
                End If
                Return _Instance
            End Get
        End Property
     
    End Class
    2ème implémentation: le Singleton à initialisation tardive à l'aide de la classe Lazy(Of T) (Framework v4)
    Code VB.Net : 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
     
    Public NotInheritable Class Singleton
     
        Private Shared ReadOnly _Instance As Lazy(Of Singleton)
     
        Private Sub New()
        End Sub
     
        Shared Sub New()
            _Instance = New Lazy(Of Singleton)(Function() New Singleton, True)
        End Sub
     
        Shared ReadOnly Property Instance As Singleton
            Get
                Return _Instance.Value
            End Get
        End Property
     
    End Class
    3ème implémentation: le Singleton a classe imbriquée
    Code VB.Net : 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
     
    Public NotInheritable Class Singleton
     
        Shared ReadOnly Property Instance As Singleton
            Get
                Return Nested.Instance
            End Get
        End Property
     
        Private Class Nested
     
            Friend Shared ReadOnly Instance As New Singleton
     
            'Constructeur statique explicite pour que le type
            'ne soit pas marqué "beforefieldinit"
            Shared Sub New()
            End Sub
     
        End Class
     
    End Class

    En espérant que vous pourrez m'éclaircir tout cela , cordialement !

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    la 1ère est thread safe et en effet classique

    la 2ème je ne lui trouve aucun intérêt, la classe ne sera instanciée que lors du premier appel à singleton.instance ... mais la 1ère aussi ...

    la 3ème je ne vois pas ce qu'elle apporte (il manque le private sub new)
    et dans le pire des cas ce shared sub new sert juste à éviter une erreur d'exécution hypothétique

    donc ne pas s'embeter, la 1ère est lisible et suffit

    NB : le notinheritable n'est pas forcément nécessaire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/04/2012, 11h20
  2. Implémentation du design pattern singleton
    Par 0pierrot0 dans le forum C++
    Réponses: 1
    Dernier message: 22/01/2008, 10h01
  3. Implémentation du pattern Factory
    Par tut dans le forum C++
    Réponses: 6
    Dernier message: 02/08/2006, 13h43
  4. [Débutant] pattern singleton
    Par SirDarken dans le forum Débuter avec Java
    Réponses: 22
    Dernier message: 11/12/2004, 01h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo