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

Exemples