Le modèle Memento répond au besoin de capturer et de restaurer l'état interne d'un objet sans violer son encapsulation. Ceci est utile dans les scénarios où vous souhaitez implémenter la fonctionnalité d'annulation/rétablissement, permettant à un objet de revenir à un état précédent.
Le modèle Memento implique trois éléments principaux :
L'auteur crée un souvenir contenant un instantané de son état actuel. Ce souvenir peut ensuite être stocké par le gardien et utilisé pour restaurer l'état de l'auteur en cas de besoin.
Un exemple pratique du modèle Memento se trouve dans les éditeurs de texte qui offrent des fonctionnalités d'annulation/rétablissement. Chaque modification apportée au document peut être enregistrée comme souvenir, permettant à l'utilisateur de revenir aux états précédents du document selon ses besoins.
Modèle souvenir dans le code :
// Originator public class Editor { private String content; public void setContent(String content) { this.content = content; } public String getContent() { return content; } public Memento save() { return new Memento(content); } public void restore(Memento memento) { content = memento.getContent(); } // Memento public static class Memento { private final String content; public Memento(String content) { this.content = content; } private String getContent() { return content; } } } // Caretaker public class History { private final Stack<Editor.Memento> history = new Stack<>(); public void save(Editor editor) { history.push(editor.save()); } public void undo(Editor editor) { if (!history.isEmpty()) { editor.restore(history.pop()); } } } // Client code public class Client { public static void main(String[] args) { Editor editor = new Editor(); History history = new History(); editor.setContent("Version 1"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 2"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 3"); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!