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

Logging Java Discussion :

[Conception]Design Pattern Factory ?


Sujet :

Logging Java

  1. #1
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut [Conception]Design Pattern Factory ?
    Salut,

    J'ai une question concernant le nom du design pattern utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface PlayerFactory {
        Player createPlayer();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface ExternalPlayerFactory extends PlayerFactory {
     
    }
    C'est une classe qui permet de "construire" un objet particulier...

    Je dirais que ça ressemble à Factory, mais pour moi Factory, c'est toujours une (et une seule) classe qui contient une méthode static createMachin()... et non une classe qui peut être instanciée pour créer ces objets...

    Vous en pensez quoi??

    Sinon, j'ai pensé à Builder, mais c'est pas tout à fait ça ...

  2. #2
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Une factory est une classe permettant de fabriquer (instancier) des objets (souvent d'un même type).

    Cette classe n'est pas obligé d'avoir une et une seule méthode. Ses méthodes ne sont pas obligées d'être static.

    Dans tous les projets que j'ai recontrai, les factory étaient des Singletons avec des méthodes normales.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class EmployeFactory() {
       public Employe createEmploye(int typeEmploye) { ...}
       public Employe createSecretaire() { ...}
       public Employe createCommercial() { ...}
       public Employe createInformaticien() { ...}
    }
    Un exemple de l'api Java : javax.swing.BorderFactory

    A+

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    OK, je les nomme Factory alors

    Concernant BorderFactory, il n'y a que des méthodes statiques

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Concernant les méthodes statiques ou non tu as deux possibilités :
    - soit tu mets toutes les méthodes en statiques
    - soit ta classe est un singleton.

    Je disais juste que dans les projets que j'ai développé (maintenu), je n'avais trouvé que des Singletons.

    Pour trouvé l'exemple de BorderFactory, j'ai recherché Factory dans la javadoc.

    A+

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Par ce que ce n'est plus le pattern Factory mais son evolution : le pattern Abstract Factory qui permet de changer de fabrique. Hors on ne peut pas faire ce pattern avec des methodes statiques.

  6. #6
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Par ce que ce n'est plus le pattern Factory mais son evolution : le pattern Abstract Factory qui permet de changer de fabrique. Hors on ne peut pas faire ce pattern avec des methodes statiques.
    Certainement pas : AbstractFactory n'est en aucun cas une évolution de Factory !!! Le nom GOF de ce que vous appelez "Factory" est "Factory Method" (traduit en fabrication, ou encore méthode de fabrication). En général, AbstractFactory est implémenté en utilisant une FactoryMethod (plusieurs même !!!), mais il existe d'autre moyens de faire. Je ne saurai trop vous conseiller le "design pattern" de Gamma, Johnson, Vlissides et Helm.
    Sachez enfin qu'en général, une AbstractFactory est un singleton (ça été dit, je le confirme).

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Patriarch24
    Certainement pas : AbstractFactory n'est en aucun cas une évolution de Factory !!! Le nom GOF de ce que vous appelez "Factory" est "Factory Method" (traduit en fabrication, ou encore méthode de fabrication). En général, AbstractFactory est implémenté en utilisant une FactoryMethod (plusieurs même !!!), mais il existe d'autre moyens de faire. Je ne saurai trop vous conseiller le "design pattern" de Gamma, Johnson, Vlissides et Helm.
    Sachez enfin qu'en général, une AbstractFactory est un singleton (ça été dit, je le confirme).
    Donc mon interface, si je l'appelle PlayerFactory, c'est bon?

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Arf, exact, merci de m'avoir forcé à re-regardé de plus près quelque chose que je croyais acquis depuis longtemps... hum donc mes profs s'étaient plantés il y a 8 ans. On dit AbtractFactory, non pas parceque la fabrique est abstraite/interface et qu'on utilise des implémentations concrètes de cette fabrique pour générer des objets mais car elle permet de créer des objets de type abstrait.

    Citation Envoyé par Design Pattern Explained
    At first glance, you might be tempted to conclude it is because the factory is implemented as an abstract class with derivation for each case. But that is not the case. This pattern is called the "Abstract Factory" because the things it is intended to build are themselves debined by abstractions [...] How do you choose to implement the factory variations is not specific to the patter.
    BorderFactory se qualifie donc bien comme AbstractFactory malgrès ses méthodes statiques.

    Pour FactoryMethod en Java il faut voir du côté de la génération des Iterator par exemple.

    Citation Envoyé par Design Pattern Explained
    In Java, the iterator method on collections is a Factory method. This method returns the right type of iterator for the collection being asked for.
    Cependant, franchement, ces deux concepts de patterns créationistes sont similaires à 90% : on retourne une abstraction en créant un objet (ou une collection d'objets) spécifique(s) à un usage particulier. Seule la mise en oeuvre est (légèrement et très superficiellement) différente.

  9. #9
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Cependant, franchement, ces deux concepts de patterns créationistes sont similaires à 90% : on retourne une abstraction en créant un objet (ou une collection d'objets) spécifique(s) à un usage particulier. Seule la mise en oeuvre est (légèrement et très superficiellement) différente.
    L'objectif d'une AbstractFactory est de créer une famille de produits coopérant ensemble. Le but d'une AbstractFactory est de pouvoir changer de famille de produits, en changeant de fabrique.

    Exemple (tiré du design patterns de GHJV) :
    tu as une classe (ou une interface, c'est selon) WidgetFactory (fabrique abstraite), de laquelle dérivent les classes MotifWidgetFactory et PMWidgetFactory. Chacune définit les méthodes CreateScrollBar et CreateWindow (il s'agit de FactoryMethod !). Cet ensemble constitue les fabriques (interchangeable selon qu'on utilise Motif ou PM (Presentation Manager).
    Ensuite, on a les produits :
    les interfaces Window et ScrollBar, d'où dérivent PMWindow et MotifWindow, et PMScrollBar et MotifScrollBar respectivement.

    Le principe est que si tu utilises une PMWidgetFactory, tu créeras les objets
    PMWindow et PMScrollBar, et que si tu utilises une MotifWidgetFactory, tu créeras des MotifWindow et des MotifScrollBar. D'où le concept de famille qui n'est pas présent dans le cas d'une FactoryMethod (qui n'est rien d'autre qu'une... méthode !). Cela implique la nécessité de posséder une fabrique concrète par famille de produit.

    A noter qu'on peut implémenter une fabrique abstraite avec le modèle prototype. Dans ce cas, on initialise la fabrique avec les produits qui vont bien, et on fait des copies de ces produits (ça évite d'avoir une fabrique concrète par famille ). Mais c'est quand même nettement plus complexe.

    La similarité entre AbstractFactory et FactoryMethod tient au fait qu'en général AbstractFactory est implémenté avec des FactoryMethod.

    Le nom de Factory peut être utilisé pour la fabrication de Player (c'est bien une fabrique concrète d'ailleurs, mais qui ne gère qu'un seul type de produit).

Discussions similaires

  1. design pattern factory
    Par olive_le_malin dans le forum C++
    Réponses: 2
    Dernier message: 23/08/2007, 15h31
  2. [Conception] Design Pattern Observer Java
    Par jeb001 dans le forum Général Java
    Réponses: 4
    Dernier message: 02/05/2007, 23h43
  3. Classe + design pattern factory
    Par Rodrigue dans le forum C++
    Réponses: 8
    Dernier message: 07/11/2006, 14h42
  4. [Fabrique] [Java] Design Pattern Factory
    Par SkyBioSS dans le forum Design Patterns
    Réponses: 3
    Dernier message: 24/05/2006, 14h53

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