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 - implémenter en java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut Patron de conception Décorateur - implémenter en java
    Bonjour,

    j'étudie actuellement les patrons de conception et j'essaie d'implémenter les exemples du cours en java pour mieux comprendre
    par exemple, nous avons étudié le patron décorateur

    dans notre exemple, on enregistre des messages, que l'on décore en les horodatant
    ensuite, j'aimerais pouvoir compter les messages et tous les afficher

    or, j'ai deux problèmes :
    1. il me compte le double de message car j'ai deux instances créées à chaque message (collecteurDeDonnees et CollecteurDeDonneesHorodatees) ; je pourrais diviser par 2 mais çà me semble de la "bidouille"
    2. je n'arrive pas à afficher l'ensemble des messages, seul le premier s'affiche

    d'avance merci pour votre aide

    classe CollecteurDeDonnees
    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
     
    public class CollecteurDeDonnees {
     
    	private static int nbMessageEnregistres = 0;
    	private String message;
    	private static ArrayList<CollecteurDeDonnees> listeMessages = new ArrayList<CollecteurDeDonnees>();
     
    	public CollecteurDeDonnees(){
    		nbMessageEnregistres+=1;
    		listeMessages.add(this);
    	}
     
    	public void enregistre(String message){
    		this.message=message;
    	}
     
    	public int getNbMessagesEnregistres(){
    		return nbMessageEnregistres;
    	}
     
    	public String getMessagesEnregistres(){
    		for(CollecteurDeDonnees c : listeMessages){
    			return c.toString();
    		}
    		return "";
    	}
     
    	public String toString(){
    		return message;
    	}
    }
    classe CollecteurDeDonneesHorodatees
    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 CollecteurDeDonneesHorodatees extends CollecteurDeDonnees{
     
    	private CollecteurDeDonnees monSimpleCollecteur;
     
    	public CollecteurDeDonneesHorodatees(CollecteurDeDonnees c){
    		this.monSimpleCollecteur=c;
    	}
     
    	@Override
    	public void enregistre(String message){
    		LocalDateTime heure = LocalDateTime.now();
    		heure = heure.truncatedTo(ChronoUnit.SECONDS);
    		String messageHorodateDate = heure.toString()+"-"+message;
    		monSimpleCollecteur.enregistre(messageHorodateDate);
    	}
    }
    application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CollecteurDeDonnees c1 = new CollecteurDeDonnees();
    CollecteurDeDonneesHorodatees cd1 = new CollecteurDeDonneesHorodatees(c1);
    cd1.enregistre("Bonjour");
     
    CollecteurDeDonnees c2 = new CollecteurDeDonnees();
    CollecteurDeDonneesHorodatees cd2 = new CollecteurDeDonneesHorodatees(c2);
    cd2.enregistre("Au revoir");
    System.out.println(cd2.getNbMessagesEnregistres());
    System.out.println(c2.getMessagesEnregistres());

  2. #2
    Membre actif Avatar de Runhide
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 35
    Par défaut L'héritage et ses rouages
    Si, dans une classe, un constructeur est défini sans commencer par un appel de constructeur, Java insère un appel du constructeur par défaut de la super classe.
    On peut commencer le code d’un constructeur par un appel d’un constructeur de la classe de base : super(…), ou d'un autre constructeur de la classe this(…) alors Java n’ajoute rien.


    Je te laisse déduire pourquoi tu obtiens le double de ce que tu escomptes.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut
    je ne comprends pas...

  4. #4
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Question :
    Quels constructeurs sont réellement créés à la compilation ? Entre ceux que tu décris et ceux qui sont générés par défaut ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut
    j'ai ajouté un affichage console dans chaque constructeur CollecteurDeDonnees et CollecteurDeDonneesHororodatees
    j'obtiens 6 affichages
    le premier constructeur appelé est celui de la classe mère CollecteurDeDonnees (2 fois visiblement) puis CollecteurDeDonneesHororodatees (1 fois) et à nouveau CollecteurDeDonnees (2 fois visiblement) puis CollecteurDeDonneesHororodatees (1 fois)

  6. #6
    Membre actif Avatar de Runhide
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 35
    Par défaut
    Citation Envoyé par OZ1977 Voir le message
    j'ai ajouté un affichage console dans chaque constructeur CollecteurDeDonnees et CollecteurDeDonneesHororodatees
    j'obtiens 6 affichages
    le premier constructeur appelé est celui de la classe mère CollecteurDeDonnees (2 fois visiblement) puis CollecteurDeDonneesHororodatees (1 fois) et à nouveau CollecteurDeDonnees (2 fois visiblement) puis CollecteurDeDonneesHororodatees (1 fois)
    La réponse à ton problème se trouve dans la première réponse que j'ai donnée plus haut.

    Tu as répondu n'avoir rien compris.

    Pourtant cela fait référence à un paradigme Java élémentaire, expliqué dans n'importe quels cours.

    Tu n'as pas bien appris ton cours, et on est pas là pour enseigner.

    Comment veux tu qu'on t'aide si tu ne comprends pas le fonctionnement de l'héritage...

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2019, 13h44
  2. [Décorateur] Tutoriel vidéo pour apprendre à mettre en place le patron de conception : Décorateur
    Par Mickael Baron dans le forum Design Patterns
    Réponses: 0
    Dernier message: 05/09/2016, 10h58
  3. Réponses: 2
    Dernier message: 27/03/2014, 10h25
  4. Patron de conception Décorateur
    Par gstratege dans le forum Général Java
    Réponses: 2
    Dernier message: 17/11/2013, 19h55
  5. Réponses: 7
    Dernier message: 09/10/2013, 17h35

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