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

Langage Java Discussion :

[Concept] Fabriques, pas sûr d'avoir bien compris


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut [Concept] Fabriques, pas sûr d'avoir bien compris
    Salut,

    je viens de lire l'article suivant : http://gfx.developpez.com/tutoriel/j...teur-fabrique/

    Je ne suis malheureusement pas certain d'avoir bien compris. J'essai donc un exemple complet :

    Soit la classe Personnage avec en paramètre un nom et des vies. Avec des constructeurs classiques ça donne ça :

    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
     
    public class Personnage {
     
      private String nom;
      private int vie;
     
      public Personnage(String nom, int vie) {
        this.setTo(nom, vie);
      }
     
      public Personnage(int vie) {
        this.setTo("BOB", vie);
      }
     
     (...)
     
    }
    Jusque là, pas de problème, maintenant les fabriques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static loadPersonnageFromVie(int vie) {
      return new Personnage("BOB", vie);
    }
     
    public static loadPersonnageFromNom(String nom) {
      return new Personnage(nom, 50);
    }
    C'est ça? Je demande parce que je vois pas bien l'intérêt du code donné dans le tutoriel :

    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
     
    class NSString {
      public static NSString stringWithContentsOfFile(String path) {
        return new NSSString().loadFromFile(path);
      }
     
      public NSString encoding(String encoding) {
        setEncoding(encoding);
        return this;
      }
     
      public NSString error(NSError errorContainer) {
        setErrorContainer(errorContainer);
        return this;
      }
    }
    Je vois pas trop l'intérêt des méthodes qui retourne "this". Si on les appelle, on récupère toujours la même instance...

    Merci par avance .

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par FCDB
    Je vois pas trop l'intérêt des méthodes qui retourne "this". Si on les appelle, on récupère toujours la même instance...
    Oui, mais elle est modifiée suivant la manière dont tu l'appelles (avec l'encoding, avec l'errorContainer...)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par plegat
    Salut,

    Oui, mais elle est modifiée suivant la manière dont tu l'appelles (avec l'encoding, avec l'errorContainer...)
    Autant utiliser un modificateur alors : objet.set.., non?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Cette partie ne concerne pas les Fabriques mais les paramètres nommées.
    Gfx fait ici une allusion à une fonctionnalité présente dans certain langage, et qui devient intérréssante lorsque on a plusieurs paramètres optionnel.

    En Java on se retrouve normalement avec plusieurs constructeurs avec un nombre de paramètres variables... mais c'est difficile de s'y retrouver et on peut inverser certaines valeurs.

    Avec les paramètres nommées, on peut passer des paramètres dans n'importe quel ordre en les nommants.

    En créant des méthodes qui modifient un paramètres optionnel et qui retourne this, on retrouve un comportement similaire.

    Par exemple dans ce cas au lieu de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NSString object = new NSString(path, e, err);
    On peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NSString object = new NSString().stringWithContentsOfFile(path).encoding(e).error(err);
    L'intérêt est de pourvoir spécifier que les paramètres voulus, dans n'importe quel ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NSString object = new NSString().error(err).encoding(e);
    Bien sûr avec 3 paramètres ce n'est pas forcément intérréssant... le gain n'est visible qu'avec un certain nombre de paramètre...

    a++

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par FCDB
    Autant utiliser un modificateur alors : objet.set.., non?

    C'est toi qui voit.

    Avec les fabriques, tu récupères ton objet prêt à l'emploi en une seul ligne, lisible et compréhensible.

    Avec les setters, tu récupères un objet par défaut (suivant le constructeur appelé), que tu modifies ensuite. Ca nécessite plus de lignes de code.

    Mais au final, ça fait la même chose.

    Pour les détails, on va attendre Gfx, il semble maitriser un peu plus que moi le sujet!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Eu h j'ai comme l'impression que vous allez pouvoir attendre un tant soit peu:

    http://www.jroller.com/page/gfx/?anc...s_and_vacation
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    J'ai compris, effectivement le fait de tout aligné est une façon intéressante de coder...

    Merci

  8. #8
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Par contre je m'intérroge, je croyais qu'il ne fallait jamais exporter une référence dans une méthode ???

    Référence :

    http://gfx.developpez.com/tutoriel/java/exported/

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

Discussions similaires

  1. Je n'ai pas bien compris les structures
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 08/07/2013, 17h07
  2. Ais-je bien compris le concept de Snapshot ?
    Par asouquieres dans le forum VirtualBox
    Réponses: 1
    Dernier message: 25/08/2009, 15h17
  3. FreePascal, Lazarus, pas bien compris..
    Par Just-Soft dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2009, 16h24
  4. Bug aléatoire et pas très bien compris (open/close_system)
    Par LordPeterPan2 dans le forum Simulink
    Réponses: 8
    Dernier message: 03/07/2007, 11h08
  5. [THREAD][DAEMON]Pas bien compris....
    Par XristofGreek dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 24/09/2004, 13h28

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