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
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
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; } }
application
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); } }
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());
Partager