Utilisation Singleton ? [Résolu]

Signaler
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
-
sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
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 !

14 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
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;
}
}
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
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.
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

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 ;)

@++
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

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 ;)

@++
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
J'aurais du rafraîchir la page après avoir été pissé ;)
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
3
Merci à tous, ça marche nikel ;)



PS : je valide uniquement le derniere post, mais toutes les solutions fonctionnent
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
Favoritisme !
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
trop facile

Sébastien FERRAND
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
Ouaip ! : )
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
Attend , t'arrive après la guerre et tu as les lauriers !
Scandale :>
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
bon, je suis d'avis qu'il mette reponse acceptée sur tout nos réponses

Sébastien FERRAND
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
3
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 ! :)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32