Aller au menu - Aller au contenu

Soyez à l'écoute de vos objets : le pattern observer

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Pseudo Commentaire
Page 1 
Hors ligne TTZERO # Posté le 02/12/2008 à 17:02:32

C'est normal que dans le code les classes fenetre "swing et awt" n'implémente pas l'interface observer ? Et que du coup elles ne surchargent pas la méthode update()?
Hors ligne MaeV # Posté le 30/09/2009 à 15:36:13
Avatar

Même remarque. Je comprend pas vraiment tout de ce chapitre.
J'ai compris dans l'ensemble le pattern strategy, mais la...
De plus la ZFenetre extends JFrame mais pas "implements Observabteur".
De même la class Horloge implements Observable et utilise la methode "update"...?
Un indice?(cysboy?)
 
Hors ligne huit_six # Posté le 07/10/2009 à 17:40:30
Avatar

Bonjour,
Chapitre très intéressant de nouveau, mais j'ai une question sur la fin.
Vous dites que vous n'utilisez pas les classe prédéfinies de java et que vous codez vos propres observateur et observables, mais en quoi cela vous affranchit du problème de l'héritage multiple ? Vous utilisez des interfaces ?

D'avance merci.

Je vous invite à faire un tour sur mon site.
 
Hors ligne tguiot # Posté le 21/10/2009 à 23:44:00

Deux zéros avant moi ont posé la question que je me posais, mais comme ils n'ont pas eu de réponse, je relance...

Pourquoi la déclaration de la classe fenêtre ne précise-t-elle pas qu'elle implémente l'interface Observateur ? J'aurais pensé, d'après le diagramme de classes qu'on devait avoir ceci:
Code : Java
1
2
3
public class Fenetre extends JFrame implements Observateur {
[...]
}


Puis plus loin, il y a cet étrange appel de fonction:
Code : Java
1
2
3
4
5
this.horloge.addObservateur(new Observateur(){
	public void update(String hour) {
		label.setText(hour);
		}
	});


Comment se fait-il que la définition de la méthode update se fasse dans le passage de paramètres de la fonction addObservateur??

C'est bizarre quand même...

Est-ce que c'est tout à fait équivalent à la déclaration de classe comme je l'ai fait ci-dessus, avec la redéfinition de update séparément?
Hors ligne Gab'z # Posté le 16/05/2010 à 12:09:32

Études : IUT Nancy-brabois

Bonjour, et même remarque que celle des autres, toujours pas d'éclaircissements là dessus ?

Je débute seulement mais j'arrive quand même (grâce au SdZ en partie) à lire du code, visiblement il ne respecte pas l'implémentation de l'interface comme énoncé plus haut, sans doute un oubli, mais pour l'étrange appel de fonction, je me pose aussi des questions. Une âme charitable saurait-elle nous donner quelque éclaircissement à ce propos ?
Hors ligne Gab'z # Posté le 16/05/2010 à 13:42:45

Études : IUT Nancy-brabois

Euh, je propose une petite modif, trois fois rien, mais ca devrait être équivalent et répondre plus ou moins à la question :
j'ai simplement ajouté implement Observateur qui semble manquer et déplacer la redéfinition de update(), au final ca me semble un poil moins déroutant.

Code : Java
 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
package com.sdz.vue;

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;

import com.sdz.model.Horloge;
import com.sdz.observer.Observateur;

public class Fenetre extends JFrame implements Observateur {

    private JLabel label = new JLabel();
    private Horloge horloge;

    public Fenetre() {
        /* On initialise notre JFrame  */
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setSize(200, 80);

        /* On initialise l'horloge  */
        this.horloge = new Horloge();
        //On place un écouteur sur notre horloge
        this.horloge.addObservateur(new Observateur());

        /* On initialise notre JLabel  */
        Font police = new Font("DS-digital", Font.TYPE1_FONT, 30);
        this.label.setFont(police);
        this.label.setHorizontalAlignment(JLabel.CENTER);
        /* On ajoute le JLabel à notre JFrame */
        this.getContentPane().add(this.label, BorderLayout.CENTER);
    }

    /* Lorsque l'observable change, la méthode update() est invoquée */
    public void update(String hour) {
        label.setText(hour);
    }

    /* Méthode main pour lancer le programme */
    public static void main(String[] args) {
        Fenetre fen = new Fenetre();
        fen.setVisible(true);
    }
}


Du coup après avoir dit ça, je me demande s'il ne s'agit pas d'une pratique, je veux dire qu'on préfère peut-être redéfinir update() dans le code plutôt que de l'écrire clairement plus bas...
On s'y prend comment alors ?
Connecté cysboy # Posté le 16/05/2010 à 14:00:53
tout est bô dans l' info
Avatar

Avis : Très bon Groupe : Auteurs

Ville : Tremeur
Pays : France métropolitaine
Études : CNAM

Apparemment, vous ne vous rappelez pas du chapitre sur les JTextField et particulièrement la petite aparté sur les classe anonymes...

Retournez y faire un tour car tout est expliqué : c'est juste une manière plus rapide d'écrire une implémentation d'interface ou de classe abstraite. :)

Image utilisateurImage utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur
 
Hors ligne Gab'z # Posté le 16/05/2010 à 15:37:07

Études : IUT Nancy-brabois

Mieux que ça, je ne l'ai pas lu sur le site, j'avais d'abord commencé avec un gros bouquin, j'ai dû passer très vite sur les classes anonymes, étant rangées avec les classes, quand on les découvre ça vous laisse un peu sur le c..
Du coup après avoir relu le paragraphe donné en lien, tout devient évident ! Mille mercis.
Hors ligne Gnarkinou # Posté le 17/05/2010 à 12:29:50
Dans le mouton, tout est bon !
Avatar

Ville : Bangaluru
Pays : Inde

Salut tout le monde! :p

Juste pour dire: A quand la suiiiiiiiiteeeeeee?? :euh:

Sinon bon tuto. Je dois avouer qu`a cote, tout ceux que j`ai trouve sur internet sont incomprehensible.

C`est dans ce genre de cas ou un petit:"Vive le site du ZerO" s`impose non? :D

:p Mouwhahahahaha :p
Secret (cliquez pour afficher)
Ehh!? Qui ta permis de clicker la toi?? Non mais! Clickeur va!

Codeur: C/java/html/css/J2EE Apprend: C++
Recherche: projet jeux video
Image utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateur
 
Hors ligne Zerophile # Posté le 05/02/2011 à 11:43:33

Bonjour, Il n'y a pas de problème cysboy s'y connait...Par contre cette section, comme certaines sections Java d'ailleurs, n'est, à mon humble avis de Zéro :) , pas assez explicite et simple pour un zéro. revoir un peu, développer, simplifier (ou plutôt étendre) les notions vu dans ce magnifique chapitre ne serait pas inutile. Merci d'avance cysboy.
Hors ligne Mini Vado # Posté le 27/02/2012 à 15:43:51
Avatar

Études : Exia.Cesi, Ecole Supérieure d'Informatique du Cesi

juste une petite infos, concernant la gestion des multi threads, voici un tuto sdz mettant en oeuvre le framework executor qui explique - un peu, faut avoir des notions - comment gérer au mieux les threads.
Inclus dans le JDK 1.5, si je ne m'abuse et très puissant !


http://www.siteduzero.com/tutoriel-3-5 [...] executor.html

Et pour ceux qui chercheraient un autre tutoriel sur la pattern observer, je vous conseille celui ci:
http://design-patterns.fr/observateur-en-java

Il ressemble à ce tuto mais apporte un vision différente.

Développeur Web (HTML 5 & Css3 | JS | Php 5)
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx