Beruflich Dokumente
Kultur Dokumente
1. voir http://users.info.unicaen.fr/~bmermet/Enseignement/CoursPDF/designPatterns.pdf
Prsentation gnrale
Objectif
Permettre un objet de prvenir un ensemble d'autres objets inconnus au moment de sa conception de certains changements de son tat
Problme
Certains changements d'tat d'un objet O sont susceptibles d'en intresser d'autres Ces autres objets sont inconnus lors de la conception de O Faire grer O une liste d'observateurs (ou couteurs) et les prvenir lors des changements d'tats intressants
Solution
Architecture gnrale
Subject + attach 1 + detach + notify coll <<interface>> * Observer + update
Doit s'enregistrer auprs du sujet concret en appelant attach() ConcreteSubject + stateChange Dfinition concrte de la mise jour ConcreteObserver + update
appelle notify()
Architecture simplifie
ConcreteSubject + attach + detach + notify + stateChange
coll
ConcreteObserver + update
Architecture rutilisation
ObserverSupport + attach + detach + notify
coll
support 1
L'architecture MVC
Principe gnral
But
Principe
Les 3 composantes suivantes d'une donne sont distingues et spares
Le modle (sa structure) La vue (sa reprsentation pour affichage) Le contrleur (les moyens de modifier la valeur)
Le modle
Rle
Encapsuler les proprits d'une donne tre indpendant des vues et contrleurs Dfinir les accesseurs aux proprits de cette donne Maintenir une liste d'couteurs (vues et contrleurs se dclarent comme couteurs) Prvenir les couteurs lorsque la donne est modifie Implantation du design pattern Observer
Consquences
La vue
Rle
Reprsenter la donne encapsule via un modle Se maintenir jour lorsque le modle est modifi Doit s'enregistrer comme couteur au niveau du modle
Consquences
Le contrleur
Rle
Permettre l'utilisateur de modifier la donne encapsule dans le modle Doit ventuellement s'enregistrer comme couteur du modle pour tre mis jour si le modle est modifi Doit appeler les accesseurs du modle en fonction des actions de l'utilisateur
Consquences
MVC et Swing
Architecture gnrale
Communication indirecte modle Communication directe
Vue
Contrleur
Vue/Contrleur
JComponent
Object
AbstractButton
DefaultButtonModel
JButton
<<Interface>> ButtonModel
<<Interface>> ItemSelectable
getActionCommand setActionCommand getMnemonic setMnemonic isArmed isEnabled isPressed isRollOver isSelected setArmed setEnabled setPressed setRollOver setSelected
update
Affichage d'un composant dlgu une autre classe ("UI delegate") Exemple
Pour un bouton JButton, affichage dlgu une sous-classe de ButtonUI, comme MetalButtonUI
Implantation
Le bouton JButton est un observateur de ce que dtecte le ButtonUI et retransmet les infos ses propres couteurs
MVC1
Modle
Les donnes (Java Beans) La page web/JSP Une servlet de contrle qui
Vue
Contrleur
Traite l'info de la page source en modifiant les donnes si ncessaire Affiche la nouvelle page
MVC1 : exemple
Vue1 Vue2 Vue1 Vue3 Vue1 Vue4
Contrle1
Contrle2
Contrle3
Modle1
Modle2
Modle3
Du MVC1 au MVC2
Modle MVC2
MVC2 : exemple
Vue1 Vue2 Vue1 Vue3 Vue1 Vue4
Vue traitement(Requte r)
Traitement1
Traitement2
Traitement3
Modle1
Modle2
Modle3