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 composants 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 une fonctionnalité 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 Stackhistory = 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()); } }
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3