Illustration sur le TP2

publicité
TP2 ... MVC ?


JList

Contrôleur

Vue
JLabel



[email protected]
contrat Creative Commons Paternité-Pas d'Utilisation
Commerciale-Partage des Conditions Initiales à
l'Identique 2.0 France License
Vue
JSlider

Contrôleur

Vue
ImageLibrary

Modèle
Changer l'image courante
Changer l'image courante
Modèle
ImageLibrar
y
JList
JLabel
Jslider
Modifier sa taille
Modifier sa taille
Modèle
ImageLibrar
y
JList
JLabel
Jslider
Ajouter une nouvelle image
Ajouter une nouvelle image
Modèle
ImageLibrar
y
JFileChooser
JList
JLabel
Jslider
La solution ?
JLabel
JProgressBar
JList

Passage à l'échelle ??

Ajout d'un widget ?!
Jslider
Modèle
ImageLibrar
y
JSpinner
JLabel
JFileChooser
Cas idéal : changer l'image courante
Modèle
JList
ImageLibrar
y
JLabel
Jslider
Cas idéal : modifier sa taille
Modèle
JList
ImageLibrar
y
JLabel
Jslider
Cas idéal : ajouter une image
JFileChooser
Modèle
Jslider
ImageLibrar
y
1 nouveau composant
JList
JLabel
=
1 nouvelle connexion
au modèle
Bilan

Rendre les composants indépendants les uns
des autres

Placer le modèle au centre des dialogues

Simplifier l'écriture des interfaces complexes

Rendre modifiable / évolutif le code
design pattern

Un patron pour nous sauver la vie : Observer
Observable
Observer
Attach(Observer)
Notify()
Update()
Observer Design Pattern





One to many
Abstract coupling between subject and observer, each can be extended
and reused individually.
Dynamic relationship between subject and observer, such relationship can
be established at run time. This gives a lot more programming flexibility.
Support for broadcast communication. The notification is broadcast
automatically to all interested objects that subscribed to it.
Unexpected updates. Observes have no knowledge of each other and
blind to the cost of changing in subject. With the dynamic relationship
between subject and observers, the update dependency can be hard to
track down.


Subject

Knows it observers

Has any number of observer

Provides an interface to attach and detaching observer object at run time
Observer



Provides an update interface to receive signal from subject
ConcreteSubject

Store subject state interested by observer

Send notification to it's observer
ConcreteObserver

Maintain reference to a ConcreteSubject object

Maintain observer state

Implement update operation
Coder ?
import java.util.Observable;
import java.util.Observer;
public class ImageLibray extend Observable
public class MonJLabel implements Observer
(& extends JLabel)
Un exemple simple
1 Contrôleur
1 Modèle
1 Vue
Un exemple simple
JtextField
Modele
Integer data;
JLabel
Abstraction
Modele
Integer data;
Abs 1
JTextField
Abs 2
JLabel
Un exemple simple
Observable
JTextField
Modele
Integer data;
Observer
MonJLabel
JLabel
Un exemple simple
Observable
JTextField
Modele
Observer
JLabeltoModel
Integer data;
JLabel
On modélise explicitement le contrôle
Un exemple simple
JTextField
Modele
Integer data;
Un exemple simple
ActionListener
JTextField
Modele
Integer data;
Un exemple simple
JtextField
ActionListener
JtextFieldToModel
Modele
Integer data;
Un exemple simple complet
JtextField
ActionListener
JtextFieldToModel
Observable
Modele
Observer
ModeltoJLabel
Integer data;
JLabel
Bilan

Modèle indépendant

Utilisation des classes natives de Swing

Passage par des adaptateurs de types

Objets simples (1 méthode)

Deux interfaces

Gèrent le dialogue

Transforme les types
Téléchargement