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 :

Quelques Précisions [Fabrique]


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut Quelques Précisions
    Bonjour,

    J'aimerais simplement avoir une précision sur l'implémentation du pattern factory.
    Il y a quelque chose que je ne comprends pas alors je vais prendre un exemple :
    J'ai une fabrique de controleurs (ControleurFactory) avec différentes méthodes de crétation pour mes divers controleurs (ControleurA, ControleurB...). Or dans de nombreux bouquins on explique que pour éviter le couplage, il ne faut pas que les méthodes de fabrication renvoient un objet du type concret mais un objet abstrait, une interface, qui serait commune à tous les controleurs dans mon exemple.
    Pour illustrer :
    Ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class ControleurFactory
    {
         public ControleurA CreerControleurA() {...}
         public ControleurB CreerControleurB() {...}
    }
    Ce qu'il faudrait faire (d'après les bouquins) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class ControleurFactory
    {
         public IControleur CreerControleurA() {...}
         public IControleur CreerControleurB() {...}
    }
    /* Avec IControleur, interface commune aux controleurs */
    Dans la deuxième solution le code client manipule une interface et est donc "libéré" d'une implémentation concrète. Mais c'est là que je ne comprends plus : Le client il a bien besoin de manipuler une implémentation concrète, sinon comment pourrait-il accéder aux méthodes de mes différents controleurs ? il n'y a pas du tout la même chose dans controleurA et dans controleurB, donc comment manipuler cette interface si ce n'est en la recastant dans un type concret côté client pour utiliser les méthodes du controleur en question (ce qui n'a du coup plus aucun intérêt).
    Donc dans une solution comme dans l'autre le code client est toujours couplé à une implémentation concrète.

    Quelqu'un à compris qq chose et peut éventuellement me fournir des éléments de réponse ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Je pense que j'ai du mal comprendre le rôle de la factory. Elle ne doit pas être adapté à ma situation.

  3. #3
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    Tu n'as pas une interface commune à tout tes controleurs mais une pour chaque contrôleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public IControleurA CreerControleurA() {...}
    public IControleurB CreerControleurB() {...}
    De cette manière, tu n'as qu'à changer le code de CreerControleurA lorsque l'implémentation de IControleurA change (Il y a d'autres techniques pour ne pas avoir à tout recompiler quand on change la classe d'implémentation. Tu peux aussi utiliser Spring).

    yann

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Je crois que j'ai compris. Tu peux quand même fournir un exemple parlant pour illustrer ?
    Merci

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Je sais pas s'il y a vraiment besoin d'un exemple pour un truc comme ça...

    Tu pourrais avoir quelque chose comme ça :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface IControleurA {<div style="margin-left:40px">public controlleA();</div>}

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface ControleurB {<div style="margin-left:40px">public controlleB();</div>}

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    public class ControleurBImpl {<div style="margin-left:40px">public controlleB(){<div style="margin-left:40px">//N'importe quoi</div>}</div>}

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    public class ControleurAImpl {<div style="margin-left:40px">public controlleA(){<div style="margin-left:40px">//N'importe quoi</div>}</div>}

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ControleurFactory{<div style="margin-left:40px">
     
    public IControleurA creerControleurA(){<div style="margin-left:40px">return new ControleurAImpl();</div>}</div><div style="margin-left:40px">
     
    public IControleurB creerControleurB(){<div style="margin-left:40px">return new ControleurBImpl();</div>}</div>}

    et à l'utilisation, tu as tout simplement quelque chose comme ca :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IControleurB controleur = factory.creerControleurB();
    controleur.controlleB();

    C'est pas plus compliqué que ça

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    oui mais ça j'avais compris
    C'était plus un exemple réel parlant que je cherchais, genre un truc pas avec des "ControleurA, ControleurB", mais quelque chose basé sur un exemple concret.
    De toutes façons c'est pas bien grave, j'ai saisi le principe.

    Merci à tous

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

Discussions similaires

  1. Quelques précisions. . .
    Par Array dans le forum Débuter
    Réponses: 220
    Dernier message: 09/02/2008, 08h14
  2. Réponses: 1
    Dernier message: 23/12/2007, 19h44
  3. Entrées.. Sorties.. quelques précisions..
    Par Djef-69 dans le forum SL & STL
    Réponses: 2
    Dernier message: 28/11/2007, 23h16
  4. Quelques "précisions" sur Struts
    Par Atma_ dans le forum Struts 1
    Réponses: 19
    Dernier message: 03/11/2006, 15h20

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