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 :

[Java] Quel modele de conception choisir au lieu de l'heritage ? [Décorateur]


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut [Java] Quel modele de conception choisir au lieu de l'heritage ?
    Voici un probleme qui m'a ete soumis recemment. Je chercher la meilleure solution possible.

    Soit une classe Voiture dont voici la description :

    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
    18
    19
    20
    21
    22
    public classe Voiture {
      private String modele;
    
      private Voiture(String modele) {
        this.modele = modele
      }
    
      public String getModele() {
        return modele;
      }
      
      public double getPrixHT() {
        double prixHT;
    
        // le prix est recupere dans une base de donnees distante.
    
        ...
    
        return prixHT;
      }
    }
    Voila le probleme :

    Une voiture peut etre achetee avec sans options supplementaire. Chaque option s'ajoute au prix de base.

    Voici les options :
    - Traitement anti corrosion : + 8% du prix de base.
    - Boite automatique : + 500 Euros.

    Donc il est possible d'acheter une voiture avec toutes les combinaisons d'option possible ou meme sans option.

    Avez vous une piste a me proposer pour calculer le prix de la voiture avec ou sans options.

    J'ai d'abord pense a l'heritage mais ce n'est pas recommande car toutes les options sont multiples et elles generent beaucoup de combinaisons.

  2. #2
    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 suis pas sûr de vraiment comprendre ton problème...

    Il ne suffirait pas d'avoir une liste d'options dans la classe Voiture et pour le calcule, il suffit de parcourir la liste et d'appeller par exemple la méthode calcul qui renvoie un prix supplémentaire de chaque option. ???

  3. #3
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut
    Merci pour ta premiere reponse.

    Au debut je voulais creer autant de classes qui heritent de la classe Voiture pour chaque combinaison. J'ajouterais une classe abstraite calculerPrix dans la classe voiture et donc le calcul prendrait en compte le calcul de l'option.

    Mais cela va me faire beaucoup de classe a ecrire si d'autres options se creent.

  4. #4
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Attention, tu confonds méthode et classe là je trouve.

    CalculePrix() pourrait être une méthode abstraite à la limite dans la classe Voiture et tu aurais des classes filles du style Berline, Cabriole, Coupe, avec pour chacune une redéfinition voire une surcharge de cette méthode mais ce n'est en aucun cas une classe.

    Je pense comme wichtounet qu'il s'agit juste d'une liste de méthodes dans ta classe Voiture que tu appelleras en fonction des options que tu auras choisies. Ceci est facilité par le fait que le prix des options ne dépendent pas les unes des autres mais se sont juste des rajouts de prix ou des calculs par rapport au prix de base donc pas de problème

  5. #5
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut
    Citation Envoyé par sironimo
    Je pense comme wichtounet qu'il s'agit juste d'une liste de méthodes dans ta classe Voiture que tu appeleras en fonction des options que tu auras choisies. Ceci est facilité par le fait que le prix des options ne dépendent pas les unes des autres mais se sont juste des rajouts de prix ou des calculs par rapport au prix de base donc pas de problème
    Oui mais si le client choisi une option, le prix change et doit etre sauve pour le calcul d'une deuxieme option choisie.

  6. #6
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut
    Voici ma solution :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    public class Voiture
    {
      //-------------------------------------------------------------------
    
      private String modele;
      private double prix_final;
    
      //-------------------------------------------------------------------
    
      public Voiture(String modele)
      {
        this.modele = modele;
        prix_final = getPrixHT();
      }
    
      //-------------------------------------------------------------------
      
      public String getModele()
      {
        return modele;
      }
      
      //-------------------------------------------------------------------
      
      public double getPrixHT()
      {
        double prixHT;
       
        // le prix est recupere dans une base donnees distante.
        
        return prixHT;
      }
      
      //-------------------------------------------------------------------
      
      public double getPrixFinal()
      {
        return prix_final;
      }
      
      //-------------------------------------------------------------------
      
      public void ajoutBoiteAutomatique()
      {
        prix_final += 500;
      }
      
      //-------------------------------------------------------------------
      
      public void ajoutTraitementAntiCorrosion()
      {
        prix_final += getPrixHT()*8 / 100;
      }
      
      //-------------------------------------------------------------------
      
    }
    Cela nous donne une utilisation extremement simplifiee :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Test
    {
      //-------------------------------------------------------------------
      
      public Test() { }
      
      //-------------------------------------------------------------------
      
      public static void main(String[] args)
      {
        Test test1 = new Test();
        
        Voiture voiture = new Voiture("Toyota");
        
        voiture.ajoutBoiteAutomatique();
        
        voiture.ajoutTraitementAntiCorrosion();
        
        System.out.println("Vous avez achete une " + voiture.getModele() + "\n"
                           + "Son prix initial est de " + voiture.getPrixHT() + "\n"
                           + "Son prix avec option(s) est de " + voiture.getPrixFinal() + "\n");
        
      }
    
      //-------------------------------------------------------------------
    
    }
    Probleme :

    Si le prix dans la base de donnee change apres que l'objet ai ete cree, le prix final ne reflete plus le veritable prix.

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

Discussions similaires

  1. [Java] Quel certification choisir ?
    Par amine_en_france dans le forum Certifications
    Réponses: 3
    Dernier message: 26/11/2010, 13h23
  2. web browser en java .. quel composant ?
    Par vdavid1982 dans le forum Composants
    Réponses: 3
    Dernier message: 22/10/2009, 16h08
  3. Réponses: 14
    Dernier message: 19/03/2009, 11h06
  4. [JAVA] Quel EDI JAVA choisir pour Mac OS X ?
    Par didi dans le forum Développement OS X
    Réponses: 18
    Dernier message: 29/09/2007, 22h07
  5. Debutant en Java : Quel EDI choisir ?
    Par raoullandry dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 22/03/2007, 13h36

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