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 :

méthodes d'accès et spécialisation [Singleton]


Sujet :

Design Patterns

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut méthodes d'accès et spécialisation
    Bonjour,

    j'ai un soucis de conception autour d'un singleton.

    Le singleton en question a une donnée au niveau de l'instance.

    Je voudrai avoir ça :

    Singleton.FaitCeci()
    Singleton.FaitCela()

    et pouvoir spécialiser FaitCeci et FaitCela dans une classe fille.

    Est-ce possible ?
    Quelles sont les autres solutions ?

  2. #2
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    Bonjour,
    Est-ce que tu peut préciser de plus le besoin d'utiliser des classes filles pour un singleton?? le besoin n'est pas très claire.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Je veux un singleton generique dans un package pour faire une librairie et specialuser dans l'application.

  4. #4
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Il est tout à fait possible d'implémenter ce genre de comportement. On peut même créer une classe de singleton abstraite.

    Ca requiert par contre que le singleton connaisse l'existence des classes filles pour pouvoir les instancier.

    Main.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Main {
        public static void main(String[] args) {
            MutableSingleton.setActualClass(SpecializedSingleton.class);
    
            MutableSingleton s = MutableSingleton.getInstance();
            System.out.println(s.getIdentity());
        }
    
    }
    MutableSingleton.java:
    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
    public class MutableSingleton {
        private static Class actualClass = MutableSingleton.class;
        private static MutableSingleton instance = null;
    
        public static void setActualClass(Class cls) {
            if(instance != null)
                throw new IllegalStateException();
            
            if(!MutableSingleton.class.isAssignableFrom(cls))
                throw new IllegalArgumentException();
            
            actualClass = cls;
        }
    
        public static MutableSingleton getInstance() {
            if(instance == null) {
                try {
                    instance = (MutableSingleton) actualClass.newInstance();
                } catch (InstantiationException ex) {
                    throw new InternalError("N'a pas pu instancier le singleton.");
                } catch (IllegalAccessException ex) {
                    throw new InternalError("N'a pas pu instancier le singleton.");
                }
            }
    
            return instance;
        }
    
        public String getIdentity() {
            return "MutableSingleton";
        }
    }
    SpecializedSingleton.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class SpecializedSingleton extends MutableSingleton {
        public String getIdentity() {
            return "SpecializedSingleton";
        }
    }
    Note: Le pattern Factory pourrait être une alternative à ce que je viens de montrer. Tout dépend du cas.

    Edit: Tiens, je n'ai pas de coloration syntaxique... Aurais-je raté un truc ?
    Re-Edit: Ah non, c'est juste qu'on n'est pas dans un forum java... et je réponds en java -_-' sorry

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Ok donc en fait l'astuce c'est de toujours passer par le Singleton "mère" et de simplement déléguer les traitements à une classe fille qui redéfinit les traitements.

    ça ressemble fortement au DP Stratégie ça... non ?

    J'ai donc une Coquille + StrategieCoquille que l'on peut spécialiser.

    Je peux donc faire

    Coquille.setImplementation(MaStrategieCoquille.class);
    Coquille.FaitCeci -> Appelle MaStrategieCoquille.instance.FaitCeci
    Coquille.FaitCela -> Appelle MaStrategieCoquille.instance.FaitCela

    C'est cooooooool.

    Merci Antoine_935, t'es trop fort !

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

Discussions similaires

  1. méthode d'accès au "OK PROMPT" ?
    Par lennelei dans le forum Solaris
    Réponses: 8
    Dernier message: 24/02/2009, 10h01
  2. [débutant] BD d'images numériques: création et méthode d'accès
    Par thibouille dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/11/2007, 18h23
  3. Méthode d'accès à Oracle via PHP
    Par nicocolt dans le forum Oracle
    Réponses: 1
    Dernier message: 19/10/2006, 15h57
  4. [c#] Méthode d'accès aux objets de ma form1
    Par SDuh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/03/2006, 11h21
  5. Réponses: 4
    Dernier message: 16/02/2006, 17h45

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