Utilisation Singleton ?

Résolu
cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 - 2 sept. 2005 à 01:08
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre 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 !
A voir également:

14 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 sept. 2005 à 02:33
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;
}
}
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 02:35
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.
3
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
2 sept. 2005 à 02:42
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 ;)

@++
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 sept. 2005 à 09:27
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
2 sept. 2005 à 01:32
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 ;)

@++
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 02:36
J'aurais du rafraîchir la page après avoir été pissé ;)
0
cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 3
2 sept. 2005 à 15:31
Merci à tous, ça marche nikel ;)



PS : je valide uniquement le derniere post, mais toutes les solutions fonctionnent
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 15:38
Favoritisme !
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 sept. 2005 à 15:39
trop facile

Sébastien FERRAND
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 sept. 2005 à 15:40
Ouaip ! : )
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 15:40
Attend , t'arrive après la guerre et tu as les lauriers !
Scandale :>
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 sept. 2005 à 15:47
bon, je suis d'avis qu'il mette reponse acceptée sur tout nos réponses

Sébastien FERRAND
0
cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 3
2 sept. 2005 à 16:58
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 ! :)
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 sept. 2005 à 16:59
0
Rejoignez-nous