Memento
Catégorie
Pattern comportemental
Problème
Capturer et externaliser l’état interne d’un objet afin que celui-ci puisse être restauré à cet état ultérieurement, sans violer l’encapsulation. Utile pour implémenter des fonctionnalités de défaire.
Solution
- Créer un objet Memento qui stocke l’état interne de l’Originator
- L’Originator crée des Mementos quand nécessaire et restaure à partir d’eux
- Le Caretaker gère les Mementos mais ne peut pas accéder ou modifier leur contenu
Structure
- Memento : Stocke l’état interne de l’Originator ; peut être étroit (interface) ou large (état complet)
- Originator : Crée des Mementos ; peut restaurer à partir d’eux ; sait comment créer/restaurer l’état
- Caretaker : Stocke les Mementos ; n’accède pas et ne modifie pas leur contenu
Avantages clés
- Encapsulation préservée — L’état interne est capturé sans exposer les détails d’implémentation
- Support de défaire/refaire — Adapté naturellement pour les fonctionnalités de défaire et les instantanés
- Stockage découplé — Le Caretaker n’a pas besoin de comprendre le format de l’état
Compromis
- Coût — Créer et stocker des Mementos peut être coûteux pour un grand état
- Gestion des ressources — Les Mementos doivent être nettoyés quand ils ne sont plus nécessaires
Quand l’utiliser
- Un instantané de l’état interne d’un objet est nécessaire pour le restaurer ultérieurement
- Exposer directement les internes d’un objet violerait l’encapsulation
- Implémenter des fonctionnalités de défaire/refaire ou de point de contrôle