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 :

[Factory Method] Questions [Fabrique]


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut [Factory Method] Questions
    Bonjour à tous,
    J'ai quelques questions sur le DP Factory method dont je ne trouve pas les réponses...si une âme charitable pouvait m'éclairer...

    D'aprés ce que j'ai compris et cela me semble logique, il n'est pas bon d'instancier une classe (on va dire Produit) directement avec le mot clé new dans le code d'une classe Cliente. Il est aussi préférable d'utiliser des classes abstraites ou interfaces afin que notre classe cliente puisse fonctionner avec toutes les sous classes de Produit, autrement dit developper pour une interface et non pas pour une implementation.

    Pour suivre ces conseils, on utilise le pattern Factory method qui définit une interface pour la création d'un objet( on va dire un objet de la classe Produit), mais en laissant à des sous classes le choix des classes à instancier ProduitContretA, ProduitConcretB...

    Voila mon souci : J'ai bien compris ces principes qui me semblent logiques, ce que je ne comprends pas, c'est comment le client peut utiliser ces fabrications sans en être couplé a ces dernières...
    Autrement dit, si j'utilise une Fabrication (FabricationConcreteA) qui hérite d'une interface ou d'une classe abstraite (Fabrication) et qu'il arrive demain qu'il faille que je change de Fabrication(FabricationConcretB), je me retrouve dans le meme souci, il faut que je cherche dans mon code toutes les instantiations ,ce que je veux dire par la, c'est que j'ai l'impression qu'on a seulement repoussé le problème, notre code n'est plus couplé aux produits mais aux fabrications

    A moins que les fabrications ne puissent etre utilisé qu'avec le pattern fabrication Absraite...

    Je ne sais pas si j'ai été clair, enfin si vous pouviez me donner des tuyaux sur votre façon de les utiliser cele serait trés sympa...

    Merci

  2. #2
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Aïssa
    A moins que les fabrications ne puissent etre utilisé qu'avec le pattern fabrication Absraite...
    Oui, c'est exactement ca:

    - Les "clients" ne connaissent que la definition de l'interface (ProduitInterface), donc ils ne sont pas liés aux differentes implémentations (ProduitContretA, ProduitContretB, ...).

    - Les implémentations, elles, ne connaissent pas du tout les clients.

    - Le lien est fait par la Factory, qui connait et instancie l'implémentation (par ex. ProduitContretA) mais ne renvoie aux clients que l' interface (ProduitInterface). Donc ton client a juste besoin de connaitre l'interface et la factory.

    En cas de création d'une nouvelle implementation, tu as juste a changer le code dans la Factory. Au lieu de faire un "new ProduitContretA()" tu fais un "new ProduitContretB()", et dans tous les cas tu retourne un "ProduitInterface"
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Merci pseudocode de ta réponse

    En fait, je m'étais posé la question car dans l'exemple donné dans le bouquin "Head first design pattern", le client instantiait directement la fabrique qu'il souhaitait avoir pour générer le produit qu'il souhaitait.
    Même dans le fameux bouquin d'Erich Gamma GOF (design Patterns), pour créer des variétés de son labyrinthe, il hérite de sa factory, mais il ne montre pas comment elles sont appelées par le client, enfin je pense qu'il les instantie directement, donc je me demandais quel était l'utilité de coupler son code avec une fabrique qui peut changer dans l'avenir...

  4. #4
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    C'est vrai que les exemples sont habituellement fait pour expliquer le "principe" de la Factory, mais pas son utilisation dans une application.

    Personnellement, je prefere faire une factory "configurable" (DP Factory + DP Strategy). Au lancement de l'application, je configure la factory en lui indiquant le nom de la classe concrete a instancier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProductFactory.setConcretClass( ConcretProductA.class );
    Ensuite, tous les clients font des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Product p = new ProductFactory().getNewProduct();
    Certains preferent mettre la factory dans un singleton, plutot que de l'instancier a chaque fois. Mais apres il faut gerer les problemes de concurence de thread...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Merci pseudoCode pour ton éclairage ;-)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2009, 19h03
  2. Problème avec factory-method sur WebSphere
    Par enimnez dans le forum Spring
    Réponses: 0
    Dernier message: 07/05/2009, 15h55
  3. Spring et factory-method
    Par dehbi dans le forum Spring
    Réponses: 3
    Dernier message: 31/03/2006, 16h00
  4. factory method
    Par mencaglia dans le forum C++
    Réponses: 2
    Dernier message: 31/01/2006, 09h02
  5. [GOF] Abstract Factory vs Factory Method
    Par Greybird dans le forum Design Patterns
    Réponses: 3
    Dernier message: 10/06/2005, 22h42

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