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

Java Discussion :

Patron de conception Décorateur


Sujet :

Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 197
    Points : 225
    Points
    225
    Par défaut Patron de conception Décorateur
    Bonjour,

    J'essaye de comprendre l'intérêt du patron de conception Décorateur.

    J'aimerais comprendre pourquoi le patron Décorateur est une solution dynamique alors que l'héritage est une solution statique ?

    Je ne comprend pas l'intérêt du patron Décorateur (on est obligé dans les deux cas d'écrire les nouvelles méthodes ou les nouvelles surcharges de méthodes)... Je ne vois pas de qui est dynamique et ce qui est statique...

    Merci,

  2. #2
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Le patern 'Décorateur' permet d'ajouter des fonctionnalités à un autre objet en enveloppant cet objet. Seul l'interface de l'objet enveloppé est imposée, Le choix de la classe de l'objet enveloppé doit peut-être fait à l'exécution (dynamique).
    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
     
    Class LineNumberReaderDecorator {
       long lineNumber;
       Reader reader;
       LineNumberReaderDecorator(Reader reader){
         this.reader = reader;
       }
       String readLine() {
         String line = reader.readLine();
         lineNumber++
         return String.format("%d : %s", new Object(){lineNumber, line});
       }
       String close() {
         return reader.close()
       }
    }
    Reader reader;
    if (...)
      reader = new FileReader("/tmp/foo.in");
    else 
      reader = new StringReader("line1\nline2\n");
    LineNumberReaderDecorator lnReader = new LineNumberReaderDecorator(reader)
    ....
    L'héritage permet de créer une nouvelle classe ajoutant des fonctionnalités à une autre classe. Un objet de cette nouvelle classe peut être créé à l'exécution mais le type de la classe de base est déjà fixé. (statique)
    Le code ci-dessus deviendrait:
    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
     
    Class LineNumberFileReader extends FileReader {
       long lineNumber;
       String readLine() {
         String line = super.readLine();
         lineNumber++
         return String.format("%d : %s", new Object(){lineNumber, line});
       }
    }
    Class LineNumberStringReader extends StringReader{
       long lineNumber;
       String readLine() {
         String line = super.readLine();
         lineNumber++
         return String.format("%d : %s", new Object(){lineNumber, line});
       }
    }
    if (...) {
      LineNumberFileReader lnfreader = new LineNumberFileReader("/tmp/foo.in");
      ...
    } else {
      LineNumberStringReader lnsreader = new LineNumberStringReader("line1\nline2\n");
      ...
    }
    Le problème ici c'est qu'il y a du code dupliqué, donc difficile à maintenir...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 197
    Points : 225
    Points
    225
    Par défaut
    Merci pour ces explications !

Discussions similaires

  1. Implémenter le patron de conception DAO par les tests
    Par thierryler dans le forum Général Java
    Réponses: 7
    Dernier message: 02/01/2013, 14h37
  2. Patrons de conceptions
    Par bilux dans le forum Langage
    Réponses: 9
    Dernier message: 24/08/2009, 09h53

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