Title: Memento
1Memento
par Rémi L. Lavoie
2But
- Sans violation de lencapsulation,
- saisir et transmettre à lextérieur dun
- objet létat interne de celui-ci, dans le
- but de pouvoir ultérieurement le
- restaurer dans cet état.
3Définition
- Le patron Memento enregistre et extériorise
létat interne dun objet pour pouvoir restaurer
lobjet à un état précédant plus tard. Létat de
lobjet est sauvegardé à des points stratégiques
pour que le mécanisme undo permette aux
utilisateurs de restaurer un objet à létat ou il
était avant une certaine opération.
4Diagramme de classe
5Rôles des Classes
- Originator
- Créer un Memento contenant un portrait de létat
interne actuel. - Utilise le Memento pour restaurer son état interne
6Rôles des Classes
- Caretaker
- Est responsable du safe-keeping du memento
- Nopère jamais ou nexamine jamais le contenu du
memento
7Rôles des Classes
- Memento
- Sauvegarde létat interne de lobjet Originator.
Peut sauvegarder autant de composantes
nécessaires (beaucoup ou peu) de létat de
Originator (laissez à la discrétion de
loriginator) - Protège contre laccès par des objets autres que
loriginator.Les mementos ont 2 interfaces.
(façons dinteragir)Caretaker a interface minime
vers Memento, il peut seulement passer le memento
à dautres objets. LOriginator, par contre, a
une large interface, qui lui laisse laccès à
tous les informations nécessaires pour restaurer
létat précédent. Idéalement, seulement
loriginator qui produit le memento serait permis
daccéder létat interne du memento.
8Points pour/contre
- préserve les frontières dencapsulation.
- élimine le besoin de plusieurs instance du même
objet (Originator) simplement pour sauvegarder
son état. Une version plus restreinte est
sauvegarder au lieu du Originator complet. - Simplifie loriginator, car la responsabilité
de gérer le Memento est distribué au Caretaker. - simple à implémenter.
- - lutilisation peut être coûteuse.
- (si plusieurs détails à sauvegarder)
9Conseils Pratiques
- Si seulement 1 Memento est nécessaire, vous
pouvez combine le Originator et le Caretaker. - Si vous avez besoin de plusieurs Mementos,
sauvegarder que les changements incrémentaux.
Ceci sauvera de lespace. - Memento est souvent utilisé en conjonction avec
Command, Iterator et Singleton.
10Pourquoi?
- Laisser de linformation dun objet accessible à
dautres objets par des méthodes daccès - Sauvegarder de linformation pour utilisation
antérieur - Supporter la fonction undo/redo
- Utilisé dans les transactions de base de données
11Fonctionnement
12Exemple
- Voici un exemple simple qui permet de sauvegarder
létat actuel et de le restaurer.
13Caretaker
public class Caretaker // Memento
private Memento memento // Get public
Memento getMemento() return memento
// Set public void
setMemento(Memento m) memento m
14Memento
public class Memento // State private
String state // Constructeur public
Memento( String state ) this.state
state // Get public String
getState() return state
15Originator
public class Originator // State private
String state "OFF" // Get public String
getState() return state
//Set public void setState(String state)
System.out.println("State changed to "
state) this.state state
16Originator (suite)
// Cree le Memento public Memento
CreateMemento() return (new Memento(
state )) // Set le Memento public
void SetMemento( Memento memento )
state memento.getState()
System.out.println( "Restored to state " state
)
17Démonstration
par Rémi Lavoie
18Exemples dutilisations réelles
- Memento peut être utilisé dans une Session de
Servlet quand une session time-out . Létat de
lapplication est sauvegardé à laide dun
Memento et reconstruit quand lutilisateur accède
au site plus tard. - Pour sauvegardé les dimension dune fenêtre dans
des applications qui permette une vue
pleine-écran ou dans une fenêtre. - Pour implémenter la fonction de Undo dans
plusieurs applications. - Utilisé dans des transactions de base de données
19Références
- http//dept-info.labri.fr/baudon/Master/ArchiLog/
Cours.ppt.pdf - http//www.dofactory.com/Patterns/PatternMemento.a
spx - http//www.cs.unb.ca/profs/wdu/cs4015w02/ch5f.htm