Maison > Java > javaDidacticiel > Comprendre le modèle de conception Memento en Java

Comprendre le modèle de conception Memento en Java

王林
Libérer: 2024-07-24 16:06:57
original
493 Les gens l'ont consulté

Understanding the Memento Design Pattern in Java

Problème

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.

Solution

Le modèle Memento implique trois éléments principaux :

  1. Originateur : L'objet dont l'état interne doit être enregistré et restauré.
  2. Memento : Un objet qui stocke l'état interne de l'auteur. Le souvenir est immuable.
  3. Gardien : Responsable de demander à l'auteur de sauvegarder ou de restaurer son état à partir d'un souvenir.

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.

Avantages et inconvénients

Avantages

  • Préserve l'encapsulation : Permet d'enregistrer et de restaurer l'état interne d'un objet sans exposer les détails de son implémentation.
  • Annuler/Rétablir simple : Facilite la mise en œuvre de la fonctionnalité Annuler/Rétablir, rendant le système plus robuste et plus convivial.
  • Historique des états : Permet de conserver un historique des états précédents de l'objet, permettant la navigation entre différents états.

Inconvénients

  • Consommation de mémoire : Le stockage de plusieurs souvenirs peut consommer une mémoire importante, surtout si l'état de l'objet est volumineux.
  • Complexité supplémentaire : Introduit une complexité supplémentaire dans le code, avec la nécessité de gérer la création et la restauration des souvenirs.
  • Responsabilité du gardien : Le gardien doit gérer les souvenirs de manière efficace, ce qui peut ajouter de la responsabilité et de la complexité au système.

Exemple d'application dans le monde réel

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.

Exemple de code en Java

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());
    }
}
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal