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
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.