Patron singleton (avec protection contre les multi thread), tutorial patron 1

Description

Définition: Patron
Un patron est une atructure de programmation en orienté objet pour faire un option spécifique dans n'importe quel programme. C'est comme un algorithme de trie. Les algo sont déjà créé et ils sont fonctionnel dans n'importe quel programme. La différence, c'est qu'un patron de conception, c'est une option spécifique a un problème récurent. Il faut avoir un très bonne connaissance en orienté objet et le UML est tr`se vite nécessaire dasn les patron d'un certain niveau. C,est pour ça que les tutoriaux sont classé d'intermédiaire a avancer, sauf le Singleton qui est le plus facile a utiliser.

Définition: Singleton
Un singleton est la création d'une seule instance d'un objet. En théorie, un singleton sert a permettre d'avoir une seule class, masi on peut aussi le programmer pour permettre d'afficher une seule form ou conservé le résultat d'une requête SQL (comme la liste des employés qui change très peu en une journée). Donc un Singleton est une façon de programmer sa class pour qu'elle se charge en mémoire une fois et qu'après ont puisse l'utiliser de n'importe où sans devoir la recharger en mémoire.

Définition: Instance
Une instance est un objet en mémoire. Si on ouvre 2 msgbox, on a 2 instances en mémoire. Un singleton empêche d'avoir 2 instances en mémoire et permet d'en avoir une seule.

Important a regarder dans un Singleton

Shared instance As tb_users
Cette variable est la base du Singleton. Elle s'appel en tout temps Instance (par convention) elle est du même type que la class

Private Sub New()
Doit-être toujours private pour raison de sécurité

Shared Function getInstance() As tb_users
Par convention elle s'appel toujours getInstance. C'est ici le tour de passe passe qui permet de charger une seule fois en mémoire la class

SyncLock GetType(tb_users)
Ici la protection contre les multi thread trop rapide

Source / Exemple :


Public Class tb_users
    Private listeID As Hashtable
    'Déclaration de l'instance Singleton
    Shared instance As tb_users

    'Pas oublier de mettre Private pour la sécurité
    Private Sub New()
        MyBase.New()
        listeID = New Hashtable
        Dim connexion As Type.ConnexionVar = BaseDonnee.ouvertureRSTThread("select id,Prénom,Nom, utilisateur, admin from tb_users where " & EnableDate(Now))

        For i As Integer = 0 To UBound(connexion.drd)
            BaseDonnee.readThread(connexion)
            Dim usager As Type.users
            usager.prenom = BaseDonnee.itemThread(1, connexion)
            usager.nom = BaseDonnee.itemThread(2, connexion)
            listeID.Add(BaseDonnee.itemThread(0, connexion), usager)
        Next i
    End Sub

    'Voici le patron Singleton
    Shared Function getInstance() As tb_users
        'Si le singleton est pas créé, alors faut le créé
        If IsNothing(instance) Then
            'Protection contre les thread trop rapide
            'Il est mis ici après le IsNothing pour permettre d'être rapide une fois créé
            SyncLock GetType(tb_users)
                '2e valiation de l'instance, au cas que 2 thread soit entré ici
                'le 2e thread sera bloquer et le premier va créé l'instance
                'mais après, on veut que le 2e thread en crée pas une autre
                If IsNothing(instance) Then
                    'Création de l'instance
                    instance = New tb_users
                end if
            End SyncLock
        End If
        Return instance
    End Function

    Public Function getUsers(ByVal id As Integer) As Type.users
        getUsers = listeID.Item(id)
    End Function
End Class

Conclusion :


J'ai mis un 2e exemple dans le zip, mais ce coup-ci avec des forms à la place

Si vous avez moindrement des questions, écrivez ici, ça va surement en aider d'autre
S'il y a un bout du tutorial qui est pas clair, n'hésiter pas non plus

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.