Utilisation Singleton ? [Résolu]

Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Dernière intervention
10 septembre 2007
- - Dernière réponse : sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
- 2 sept. 2005 à 16:59
Hello,



Pour mon application, j'ai créé une dll. Cette dll contient la class Operation et cette classe a différentes propriétés.

Exemple :



public class Operation

{

public string date_div //accesseur

{

get {return date_div_pri;}

set {date_div_pri=value;}

}

}



Dans mon application principale, l'utilisateur va se balader dans
différents formulaires et je veux récupérer ce que l'utilisateur va
saisir pour affecter cela aux propriétés de ma classe Operation.
Jusqu'ici pas de pb.



Mais, je suis obligé d'envoyer mon instance d'Operation comme référence
à chaque formulaire pour pouvoir compléter ses propriétés. Par exemple
Form1 va me servir pour affecter la propriété login de mon instance
MyOperation, puis de Form1, j'ouvre Form2 et Form 2 peut me servir à
affecter une autre propriété de cette instance MyOperation. (J'espère
avoir été compréhensible )



Mais je trouve cela un peu lourd (d'envoyer mon instance MyOperation à
tous les formulaires) et j'ai entendu parler des Singleton.



Pouvez-vous me dire si cela pourrait correspondre à mon besoin ou si quelque chose d'autre pourrait mieux convenir.



Merci d'avance !
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
Salut, Je pense que tu pourrais faire une classe uniquement avec des propriétés et des méthodes statiques, les membres statiques étant accessibles uniquement par le nom de la classe et pas par un nom d'instance. ( mets le constructeur par défaut càd le constructeur sans argument en private ).

Comme le dit badrbadr un singleton c'est une classe avec une seule instance, ex:

// Une autre technique c'est d'utiliser un constructeur static
// pour initialiser le champ "singleton".
public sealed class Singleton
{
private static Singleton singleton = null;


private Singleton( ) { /* private ctor */ }

public static Singleton Create( )
{
if ( singleton == null )
singleton = new Singleton( );


return singleton;
}
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
3
Merci
Le singleton est une classe qui ne peut avoir qu'uneunique instance.

Tu y accedes généralement par une méthode GetInstance().

Ex :


public class Singleton
{
private static Singleton _monSingleton;

public static Singleton GetInstance()
{
if (null == _monSingleton)
_monSingleton = new Singleton();

return _monSingleton;
}

public void DoTheJob()
{
Console.WriteLine("Hello Universe");
}

}

Et tu l'utilises comme ceci :

...
Singleton.GetInstance().DoTheJob();
...

Tu est sûr avec ceci qu'il n'y aura qu'une seul instance de classe Singleton qui existera durant la vie de ton application.

Donc a priori oui c'est ce qu'il te faudrait.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de TheSaib
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
3
Merci
lol,
j ajoute que tu peux mettre une variable qui s'occupe de compter le nombre de reference;
je m explique par un exemple:

public class Singleton
{
private static Singleton _monSingleton;
private static int nbreDeReference = 0; //notre compteur

public static Singleton GetInstance()
{
if (null == _monSingleton)
_monSingleton = new Singleton();
nbreDeReference ++; //on incremente le compteur
return _monSingleton;
}

public void DoTheJob()
{
Console.WriteLine("Hello Universe");
}

}

bof, je sais pas a quoi ca peut bien servir mais bon, ca compte ;)

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_badrbadr
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
3
Merci
mouaip... moi je préfère toujours le singleton à la classe static, c'est plus "conforme" à la programmation objet.

Exemple d'implémentation :

public class Singleton {
private static readonly Singleton instance = new Singleton();

private Singleton() {
// C'est un constructeur privé... ca permet d'initialiser les objets
// que tu vas utiliser dans ton Singleton.
}

public static Singleton GetInstance() {
return instance;
}
}

juste comme ca au passage... Singleton, c'est 1 seule instance... pas n.

Sébastien FERRAND

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de sebmafate
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
0
Merci
salut;
à ce que je comprends, les classes Singleton sont des classes spéciales qui ne permettent la création que d'un seul objet.
Selon moi, ta classe Operation peut très bien être une classe singleton vu qu'elle n'a besoin d'être crée qu'une seule fois.

Cependant, je ne pense pas que cela pourrait changer grand chose a ton projet.
Il va tjrs falloir passer une reference a tes Formulaires afin qu'ils puissent mettre a jour ta classe Operation.
Y a rien de mal à ca, et de toute maniere, tu gaspilles pas de memoires avec les references.

l'utilisation du pattern singleton permet de limiter le nbre d'objets et permet aussi de savoir combien de reference furent utilisés. c l'avantage que je leur trouve

bon, j espere que je fus clair, je suis pas trop habituer aux forums ;)

@++
Commenter la réponse de cs_badrbadr
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
0
Merci
J'aurais du rafraîchir la page après avoir été pissé ;)
Commenter la réponse de TheSaib
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Dernière intervention
10 septembre 2007
0
Merci
Merci à tous, ça marche nikel ;)



PS : je valide uniquement le derniere post, mais toutes les solutions fonctionnent
Commenter la réponse de cispo
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
0
Merci
Favoritisme !
Commenter la réponse de TheSaib
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
0
Merci
trop facile

Sébastien FERRAND
Commenter la réponse de sebmafate
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
Ouaip ! : )
Commenter la réponse de Lutinore
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
0
Merci
Attend , t'arrive après la guerre et tu as les lauriers !
Scandale :>
Commenter la réponse de TheSaib
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
0
Merci
bon, je suis d'avis qu'il mette reponse acceptée sur tout nos réponses

Sébastien FERRAND
Commenter la réponse de sebmafate
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Dernière intervention
10 septembre 2007
0
Merci
J'ai hésité à valider celle-là aussi :

"J'aurais du rafraîchir la page après avoir été pissé ;)" mais finalement je me suis abstenu ;)



PLUS DE JALOUX ! :)
Commenter la réponse de cispo
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
0
Merci
lol...

Sébastien FERRAND
Commenter la réponse de sebmafate

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.