Je me demande comment faire pour avoir une instance unique d'une classe.
C'est à dire que si dans une methode quelconque je fais par exemple :
[...]
MaClasseUnique mcu = new MaClasseUnique() ;
[...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon.
Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Frederic WOEHL
public class Singleton { static private Singleton _instance = null; private Singleton() { // ... } static public Singleton instance() { if(null == _instance) { _instance = new Singleton(); } return _instance; } }
acc wrote:
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
public class Singleton {
static private Singleton _instance = null;
private Singleton() {
// ...
}
static public Singleton instance() {
if(null == _instance) {
_instance = new Singleton();
}
return _instance;
}
}
acc wrote:
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe.
C'est à dire que si dans une methode quelconque je fais par exemple :
[...]
MaClasseUnique mcu = new MaClasseUnique() ;
[...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon.
Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
public class Singleton { static private Singleton _instance = null; private Singleton() { // ... } static public Singleton instance() { if(null == _instance) { _instance = new Singleton(); } return _instance; } }
acc wrote:
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
Nicolas Repiquet
"acc" a écrit dans le message news: 3fa27c4a$0$243$
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en java en utilisant l'opérateur new, mais par contre tu peux contourner ceci en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton(); static public Singleton getInstance() { return instance; }; private Singleton() {} }
maintenant tu es obligé de passer par getInstance() pour récupérer une instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
-- Nicolas Repiquet
"acc" <acc@btm-paris.com> a écrit dans le message news:
3fa27c4a$0$243$4d4eb98e@read.news.fr.uu.net...
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe.
C'est à dire que si dans une methode quelconque je fais par exemple :
[...]
MaClasseUnique mcu = new MaClasseUnique() ;
[...]
le new me renverrais une instance déjà existente si elle existe ou la
créer
sinon.
Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en
java en utilisant l'opérateur new, mais par contre tu peux contourner ceci
en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton();
static public Singleton getInstance() { return instance; };
private Singleton() {}
}
maintenant tu es obligé de passer par getInstance() pour récupérer une
instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce
n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
"acc" a écrit dans le message news: 3fa27c4a$0$243$
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en java en utilisant l'opérateur new, mais par contre tu peux contourner ceci en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton(); static public Singleton getInstance() { return instance; }; private Singleton() {} }
maintenant tu es obligé de passer par getInstance() pour récupérer une instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
-- Nicolas Repiquet
Nicolas Delsaux
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le constructeur en protected, tu peux surcharger ton singleton, mais ça risque d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
-- Nicolas Delsaux "Etre un humain était bien, j'y ai même pris du plaisir. Mais être un cyborg a tellement plus à offrir" Kevin Warwick
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens,
si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions;
Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de
namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne
peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le
constructeur en protected, tu peux surcharger ton singleton, mais ça risque
d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un
singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
--
Nicolas Delsaux
"Etre un humain était bien, j'y ai même pris du plaisir. Mais être un
cyborg a tellement plus à offrir"
Kevin Warwick
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le constructeur en protected, tu peux surcharger ton singleton, mais ça risque d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
-- Nicolas Delsaux "Etre un humain était bien, j'y ai même pris du plaisir. Mais être un cyborg a tellement plus à offrir" Kevin Warwick
acc
"Nicolas Repiquet" a écrit dans le message de news: 3fa27f6b$0$27041$
"acc" a écrit dans le message news: 3fa27c4a$0$243$
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en java en utilisant l'opérateur new, mais par contre tu peux contourner ceci en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton(); static public Singleton getInstance() { return instance; }; private Singleton() {} }
maintenant tu es obligé de passer par getInstance() pour récupérer une instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
-- Nicolas Repiquet
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?. Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne peut pas étendre la classe Singleton ?
Stéphane.
"Nicolas Repiquet" <deadcow-remove-this@free.fr> a écrit dans le message de
news: 3fa27f6b$0$27041$626a54ce@news.free.fr...
"acc" <acc@btm-paris.com> a écrit dans le message news:
3fa27c4a$0$243$4d4eb98e@read.news.fr.uu.net...
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe.
C'est à dire que si dans une methode quelconque je fais par exemple :
[...]
MaClasseUnique mcu = new MaClasseUnique() ;
[...]
le new me renverrais une instance déjà existente si elle existe ou la
créer
sinon.
Le but est d'avoir une classe maitresse mais je ne sais pas comment
faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en
java en utilisant l'opérateur new, mais par contre tu peux contourner ceci
en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton();
static public Singleton getInstance() { return instance; };
private Singleton() {}
}
maintenant tu es obligé de passer par getInstance() pour récupérer une
instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce
n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
-- Nicolas Repiquet
Merci à tous les deux, j'ai compris !
Encore deux petites précisions;
Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne
peut pas étendre la classe Singleton ?
"Nicolas Repiquet" a écrit dans le message de news: 3fa27f6b$0$27041$
"acc" a écrit dans le message news: 3fa27c4a$0$243$
Bonjour,
Je me demande comment faire pour avoir une instance unique d'une classe. C'est à dire que si dans une methode quelconque je fais par exemple :
[...] MaClasseUnique mcu = new MaClasseUnique() ; [...]
le new me renverrais une instance déjà existente si elle existe ou la créer
sinon. Le but est d'avoir une classe maitresse mais je ne sais pas comment faire.
Merci pour votre aide.
Stéphane.
C'est un design pattern du nom de "Singleton". Tu ne peux pas le faire en java en utilisant l'opérateur new, mais par contre tu peux contourner ceci en passant par une méthode statique :
class Singleton {
static private Singleton instance = new Singleton(); static public Singleton getInstance() { return instance; }; private Singleton() {} }
maintenant tu es obligé de passer par getInstance() pour récupérer une instance de Singleton, et c'est toujours la même.
Ca serait largement suffisant si ce comportement était héritable, hélas ce n'est pas le cas ... mais on fait ce qu'on peut avec ce qu'on a.
-- Nicolas Repiquet
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?. Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne peut pas étendre la classe Singleton ?
Stéphane.
Patrick Gras
"Frederic WOEHL" wrote in message news:
public class Singleton { static private Singleton _instance = null; private Singleton() { // ... } static public Singleton instance() { if(null == _instance) { _instance = new Singleton(); } return _instance; } }
acc wrote:
[...]
Avec un peu de malchance (plusieurs threads qui accèdent en même temps à Singleton.instance()) tu auras plusieurs objets Singleton différents...
-Patrick
"Frederic WOEHL" <fwoehl@harrysoftware.com> wrote in message
news:3FA27E13.6DAE1478@harrysoftware.com...
public class Singleton {
static private Singleton _instance = null;
private Singleton() {
// ...
}
static public Singleton instance() {
if(null == _instance) {
_instance = new Singleton();
}
return _instance;
}
}
acc wrote:
[...]
Avec un peu de malchance (plusieurs threads qui accèdent en même temps à
Singleton.instance()) tu auras plusieurs objets Singleton différents...
public class Singleton { static private Singleton _instance = null; private Singleton() { // ... } static public Singleton instance() { if(null == _instance) { _instance = new Singleton(); } return _instance; } }
acc wrote:
[...]
Avec un peu de malchance (plusieurs threads qui accèdent en même temps à Singleton.instance()) tu auras plusieurs objets Singleton différents...
-Patrick
Patrick Gras
"Nicolas Delsaux" wrote in message news:1ki4rk5r360u6$.1dzfq2uhot7fr$
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne
peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le constructeur en protected, tu peux surcharger ton singleton, mais ça risque
d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
-- Nicolas Delsaux "Etre un humain était bien, j'y ai même pris du plaisir. Mais être un cyborg a tellement plus à offrir" Kevin Warwick
Hello,
il y plein de "problèmes" liés aux différentes implémentations du pattern Singleton, tu peux trouver pas mal d'infos sur www.javaworld.com en tapant Singleton dans le moteur de recherche...
-Patrick
"Nicolas Delsaux" <nicolas.delsaux@online.fr.invalid> wrote in message
news:1ki4rk5r360u6$.1dzfq2uhot7fr$.dlg@40tude.net...
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens,
si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions;
Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de
namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire
qu'on ne
peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le
constructeur en protected, tu peux surcharger ton singleton, mais ça
risque
d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un
singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
--
Nicolas Delsaux
"Etre un humain était bien, j'y ai même pris du plaisir. Mais être un
cyborg a tellement plus à offrir"
Kevin Warwick
Hello,
il y plein de "problèmes" liés aux différentes implémentations du pattern
Singleton, tu peux trouver pas mal d'infos sur www.javaworld.com en tapant
Singleton dans le moteur de recherche...
"Nicolas Delsaux" wrote in message news:1ki4rk5r360u6$.1dzfq2uhot7fr$
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Quand tu dis que ce comportement n'est pas héritable, est-ce à dire qu'on ne
peut pas étendre la classe Singleton ?
Le constructeur unique étant private, oui. Par contre, si tu passes le constructeur en protected, tu peux surcharger ton singleton, mais ça risque
d'être très dangereux, à moins que ta classe dérivée ne soit elle aussi un singleton, ce qui est un peu plus dur à implémenter.
Stéphane.
-- Nicolas Delsaux "Etre un humain était bien, j'y ai même pris du plaisir. Mais être un cyborg a tellement plus à offrir" Kevin Warwick
Hello,
il y plein de "problèmes" liés aux différentes implémentations du pattern Singleton, tu peux trouver pas mal d'infos sur www.javaworld.com en tapant Singleton dans le moteur de recherche...
-Patrick
vclassine
Nicolas Delsaux wrote in message news:<1ki4rk5r360u6$.1dzfq2uhot7fr$...
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Ce qui concrètement s'apparente souvent à une portée programme. Sauf cas tordus ça s'applique à tout ce qui à été lancé par la même commande java (java, javaw). Pour les applets je ne sais pas trop.
Une idée pour augmenter la portée serait d'utiliser un mécanisme sur socket ou via RMI...
Nicolas Delsaux <nicolas.delsaux@online.fr.invalid> wrote in message news:<1ki4rk5r360u6$.1dzfq2uhot7fr$.dlg@40tude.net>...
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens,
si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions;
Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de
namespace). Mais en général c'est alrgement suffisant pour les besoins.
Ce qui concrètement s'apparente souvent à une portée programme. Sauf
cas tordus ça s'applique à tout ce qui à été lancé par la même
commande java (java, javaw). Pour les applets je ne sais pas trop.
Une idée pour augmenter la portée serait d'utiliser un mécanisme sur
socket ou via RMI...
Nicolas Delsaux wrote in message news:<1ki4rk5r360u6$.1dzfq2uhot7fr$...
Le Fri, 31 Oct 2003 17:37:24 +0100, acc s'est levé est s'est dit : "tiens, si j'écrivais aux mecs de fr.comp.lang.java :
Merci à tous les deux, j'ai compris !
Encore deux petites précisions; Quelle est la portée de cette unicité au niveau du sytème hôte ?.
Un singleton est unique dans un ClassLoader donné (une sombre histoire de namespace). Mais en général c'est alrgement suffisant pour les besoins.
Ce qui concrètement s'apparente souvent à une portée programme. Sauf cas tordus ça s'applique à tout ce qui à été lancé par la même commande java (java, javaw). Pour les applets je ne sais pas trop.
Une idée pour augmenter la portée serait d'utiliser un mécanisme sur socket ou via RMI...
Cédric Chabanois
Patrick Gras wrote:
"Frederic WOEHL" wrote in message news:
public class Singleton { static private Singleton _instance = null; private Singleton() { // ... } static public Singleton instance() { if(null == _instance) { _instance = new Singleton(); } return _instance; } }
acc wrote:
[...]
Avec un peu de malchance (plusieurs threads qui accèdent en même temps à Singleton.instance()) tu auras plusieurs objets Singleton différents...
-Patrick
Oui, il faut faire gaffe et utiliser une synchronisation si le singleton peut être appelé à partir de plusieurs threads !
Cédric
Patrick Gras wrote:
"Frederic WOEHL" <fwoehl@harrysoftware.com> wrote in message
news:3FA27E13.6DAE1478@harrysoftware.com...
public class Singleton {
static private Singleton _instance = null;
private Singleton() {
// ...
}
static public Singleton instance() {
if(null == _instance) {
_instance = new Singleton();
}
return _instance;
}
}
acc wrote:
[...]
Avec un peu de malchance (plusieurs threads qui accèdent en même temps à
Singleton.instance()) tu auras plusieurs objets Singleton différents...
-Patrick
Oui, il faut faire gaffe et utiliser une synchronisation si le singleton
peut être appelé à partir de plusieurs threads !