La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Memento Un patron de conception par Rémi L. Lavoie.

Présentations similaires


Présentation au sujet: "Memento Un patron de conception par Rémi L. Lavoie."— Transcription de la présentation:

1 Memento Un patron de conception par Rémi L. Lavoie

2 2 But « 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. »

3 3 Dé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. 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.

4 4 Diagramme de classe

5 5 Rôles des Classes Originator Originator Créer un Memento contenant un portrait de létat interne actuel. Créer un Memento contenant un portrait de létat interne actuel. Utilise le Memento pour restaurer son état interne Utilise le Memento pour restaurer son état interne

6 6 Rôles des Classes Caretaker Caretaker Est responsable du « safe-keeping » du memento Est responsable du « safe-keeping » du memento Nopère jamais ou nexamine jamais le contenu du memento Nopère jamais ou nexamine jamais le contenu du memento

7 7 Rôles des Classes Memento 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) 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. 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.

8 8 Points 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)

9 9 Conseils Pratiques Si seulement 1 Memento est nécessaire, vous pouvez combine le Originator et le Caretaker. 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. 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. Memento est souvent utilisé en conjonction avec Command, Iterator et Singleton.

10 10 Pourquoi? Laisser de linformation dun objet accessible à dautres objets par des méthodes daccès Laisser de linformation dun objet accessible à dautres objets par des méthodes daccès Sauvegarder de linformation pour utilisation antérieur Sauvegarder de linformation pour utilisation antérieur Supporter la fonction undo/redo Supporter la fonction undo/redo Utilisé dans les transactions de base de données Utilisé dans les transactions de base de données

11 11 Fonctionnement

12 12 Exemple Voici un exemple simple qui permet de sauvegarder létat actuel et de le restaurer. Voici un exemple simple qui permet de sauvegarder létat actuel et de le restaurer.

13 13 Caretaker public class Caretaker { // Memento private private Memento memento; // Get public Memento getMemento() { return memento; } // Set public void setMemento(Memento m) { memento = m; }

14 14 Memento public class Memento { // State private String state; // Constructeur public Memento( String state ) { this.state = state; } // Get public String getState() { return state; }

15 15 Originator 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; }

16 16 Originator (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 ); }

17 17 Démonstration par Rémi Lavoie

18 18 Exemples 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. 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 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. Pour implémenter la fonction de Undo dans plusieurs applications. Utilisé dans des transactions de base de données Utilisé dans des transactions de base de données

19 19 Références


Télécharger ppt "Memento Un patron de conception par Rémi L. Lavoie."

Présentations similaires


Annonces Google