IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Design Patterns Discussion :

[Java] Singleton et héritage [Singleton]


Sujet :

Design Patterns

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [Java] Singleton et héritage
    Bonjour,

    la solution pour écrire un singleton est bien connue par le pattern e même nom.
    Par contre si à partir d'une classe Singleton, je veux écrire une sous classe Singleton, y a t'il un pattern ou équivalent pour bien écrire tout ça ?

    Merci !

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Didier 69
    Bonjour,

    la solution pour écrire un singleton est bien connue par le pattern e même nom.
    Par contre si à partir d'une classe Singleton, je veux écrire une sous classe Singleton, y a t'il un pattern ou équivalent pour bien écrire tout ça ?

    Merci !
    Je ne sais pas s'il y a un pattern, mais c'est vrai que c'est pas pratique...

    Mais je pense qu'une classe Singleton ne devrait pas être redéfinie. Tu devrais faire une classe mère sans singleton et des classes filles qui auront quand à elles un singleton.

    Rien ne t'empêche de définir une nouvelle méthode getInstanceFille dans la classe fille qui iraient quand à elles récupérer une instance de la classe Fille. Mais je ne sais pas ce que ca vaut d'un niveau conceptuel

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Didier 69
    Bonjour,

    la solution pour écrire un singleton est bien connue par le pattern e même nom.
    Par contre si à partir d'une classe Singleton, je veux écrire une sous classe Singleton, y a t'il un pattern ou équivalent pour bien écrire tout ça ?

    Merci !
    Non. Le singleton est traditionnelement fait en marquant le constructeur comme "privé". Donc pour l'heritage, c'est mort.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par pseudocode
    Non. Le singleton est traditionnelement fait en marquant le constructeur comme "privé". Donc pour l'heritage, c'est mort.
    Pas forcément, il peut y avoir des cas où cela peut être intéressant d'avoir plus implémentation du Singleton, par exemple pour gérer plusieurs versions du JRE ou différents système d'exploitation...

    Dans ce cas on utilisera la visibilité de package (pas de mot-clef de visibilité) et on déterminera la sous-classe à utilisé lors de la création du singleton, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public abstract class Singleton {
    	
    	/** Instance unique du Singleton */
    	private static final Singleton INSTANCE = createSingleton();
    	
    	/**
    	 * Constructeur par défaut.
    	 * La visibilité 'package-only' permet d'éviter d'hériter de la classe
    	 * (sauf si la classe appartient au même package)
    	 */
    	Singleton() {
    	}
    	
    	/**
    	 * Accesseur unique.
    	 */
    	public static Singleton getInstance() {
    		return INSTANCE;
    	}
    	
    	/**
    	 * Création du Singleton, selon la version du JRE
    	 */
    	private static Singleton createSingleton() {
    		String javaVersion = System.getProperty("java.version");
    		if ("1.6.0".equals(javaVersion)) {
    			return new Singleton6();
    		} else if ("1.5.0".equals(javaVersion)) {
    			return new Singleton5();
    		}
    		return new SingletonOld();
    	}
    	
    	/**
    	 * Méthode qui dépend de la version de Java
    	 */
    	public abstract void maMethodeQuiDependDuLaVersionDeJava();
    }
    Chacune des sous-classe doit faire partie du même package (afin de pouvoir hériter de Singleton) et proposeront chacune une implémentation spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class SingletonOld extends Singleton {
    	@Override
    	public void maMethodeQuiDependDuLaVersionDeJava() {
    		// Code Java 1.4 ou inférieur
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Singleton5 extends Singleton {
    	@Override
    	public void maMethodeQuiDependDuLaVersionDeJava() {
    		// Code Java 5
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Singleton6 extends Singleton {
    	@Override
    	public void maMethodeQuiDependDuLaVersionDeJava() {
    		// Code Java 6
    	}
    }
    a++

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Ah oui, c'est vrai. Toutes mes confuses.

    J'avais pas pensé a entendre une classe dans le meme package. J'utilise la visibilité packaque seulement pour isoler les composants les uns des autres.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/05/2011, 13h15
  2. Singleton et héritage..
    Par jeremm dans le forum C#
    Réponses: 6
    Dernier message: 25/04/2010, 23h11
  3. Java : Problème d'héritage
    Par GérardMartinelli dans le forum Langage
    Réponses: 3
    Dernier message: 16/12/2009, 09h53
  4. Template, Singleton et Héritage
    Par al2000 dans le forum C#
    Réponses: 3
    Dernier message: 19/04/2009, 20h21
  5. [Singleton] [Java]singleton
    Par alex'l dans le forum Design Patterns
    Réponses: 18
    Dernier message: 16/09/2005, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo