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 :

Fabrique abstraite peut-elle être un Singleton ? [GOF]


Sujet :

Design Patterns

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut Fabrique abstraite peut-elle être un Singleton ?
    Salut

    j'aimerais savoir si la fabrique abstraite doit être de préférence un singleton :

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    "La" fabrique abstraite de quoi, où, comment...?
    Franckintosh, penseur différent.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    la fabrique abstraite va recevoir un ordre d'une classe cliente pour créer des objets tq: rectangle , cercle..etc
    elle va alors deleguer cette responsabilité à ces classes filles "fabrique concretes" ..

    alors,pour gerer les ordres qui proviennent de la classe cliente, est ce que cette fabrique abstraite doit etre un "singleton"?

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    "Une" fabrique n'a d'autre utilité et de comportement que de créer des objets donc qu'il n'est pas nécessaire d'avoir une instance locale d'une telle classe qui n'est appelée que pour en créer d'autres. Ne pas avoir de singleton n'a d'intérêt que si les instances locales de la classe fabrique ont un comportement différent en fonction de la localisation.
    Franckintosh, penseur différent.

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Ce que je fais en général, c'est qu'une instance de chaque fabrique concrète est stockée dans une "FactoryFinder". Le stockage se fait dans une hashtable de la FactoryFinder avec un nom particulier pour chaque fabrique concrète.
    A l'initialisation de la FactoryFinder, on créé l'ensemble des fabriques concrètes que l'on stocke. Il n'est pas nécessaire que ces fabriques soient des singletons puisque leur manipulation se fera via la FactoryFinder.
    Mais si tu veux en faire des singletons, pourquoi pas mais ce n'est pas vraiment utile.

    si tu as des besoins de fabriques c'est que tu as besoin de configuration. Je te recommande donc de regarder le framework Spring qui prend tout cela en charge pour toi (http://www.springframework.org)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Je sais pas si cette FactoryFinder va me compliquer le diagramme, parce que je crois que le cas que je traite est plus simple !

    En fait il s’agit d’avoir une classe « FabAbstraite » dont les classes filles (concrètes) sont :
    -FabVersion1
    -FabVersion2

    Je crois que : La classe mère « FabAbstraite » ne peut pas ainsi être un singleton. Car son constructeur (privé) ne peut pas passer en héritage !!

    Par contre, les classes filles « FabVersion1 » et « FabVersion2 » peuvent être des singletons.


    Ainsi, pour créer des objets de la version2 (et j’ai besoin d’utiliser une seule version uniquement), le Client (un seul client) de « FabAbstraite » que doit-il faire ?

    FabVersion2.GetInstance() ? (GetInstance est la méthode publique statique qui aide à instancier une seule fois FabVersion2)



    Tout ça, (je crois) remet en question l’utilité de la « FabAbstraite » !!

    C’est ça mon problème
    -avoir la « FabAbstraite » comme singleton --> problème d’héritage
    -ou avoir seulement les classes filles des singleton --> remise en question l’utilité de la « FabAbstraite »

  7. #7
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Je pense que tu n'a pas saisi l'objet du pattern Abstract Factory.
    L'objectif de ce DP est de proposer à des classes une abstraction pour créer des objets sans savoir quel type réel elles créent. Ce pattern est donc utile dans un contexte ou une classe n'a pas à savoir quel type réel elle crée et aussi qu'elle n'a pas besoin de savoir quel est le type réel de l'objet créé pour le manipuler (elle le fait via une interface que les objets créés implémentent).

    Imagine un menu dans une application. A l'item 1, on attache la chaine "rectangle", à l'item 2 on attache la chaine "cercle".
    Quand un utilisateur sélection un des items, cela veut dire que l'on veut créer puis afficher la figure géométrique correspondant à la chaine attachée à l'item.

    On peut donc avoir les classes suivantes (la conception proposée est là pour t'expliquer le DP et non représentative de ce qu'il faudrait faire dans une appli de dessin) :

    Figure (méthode affiche)
    |___ Rectangle (méthode affiche)
    |
    |___Cercle (méthode affiche)


    FigureFactory (méthode create)
    |___RectangleFactory (méthode create - retourne un Rectangle)
    |
    |___CercleFactory (méthode create - retourne un Cercle)

    FactoryFinder {
    mesFactories;

    FactoryFinder() {
    mesFactories.put("rectangle",new RectangleFactory);
    mesFactories.put("cercle",new CercleFactory);
    }

    find(String factoryName) {
    return mesFactories.get(factoryName);
    }

    getInstance() // FactoryFinder est un singleton par exemple
    }

    Dans la classe qui "reçoit" le click sur l'item du menu

    {
    Factory factory = FactoryFinder.getInstance().find(item.getChaine());
    Figure fig = factory.create();
    FigureManager.add(fig);
    fig.affiche();
    }

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par manel007
    Je crois que : La classe mère « FabAbstraite » ne peut pas ainsi être un singleton. Car son constructeur (privé) ne peut pas passer en héritage !!
    !!!? Mais il ne sert à rien ton constructeur privé, il n'est jamais appelé !

    Un exemple d'implémentation d'une factory :
    http://nx.developpez.com/Articles/DAC/
    Franckintosh, penseur différent.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/10/2008, 10h52
  2. La propriété innerHTML peut-elle être en lecture seule ?
    Par Gat- dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/06/2007, 12h16
  3. Réponses: 2
    Dernier message: 13/06/2007, 12h09
  4. Réponses: 13
    Dernier message: 15/01/2007, 03h30
  5. Une Foreign Key peut-elle être null ?
    Par bassim dans le forum Firebird
    Réponses: 9
    Dernier message: 21/11/2006, 21h20

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