"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comprendre le modèle de conception Memento en Java

Comprendre le modèle de conception Memento en Java

Publié le 2024-08-07
Parcourir:610

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 composants 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'expéditeur. 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.
  • Simple Annuler/Rétablir : 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 ainsi la navigation entre les différents états.

Les 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 au 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 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.

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 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());
    }
}
Déclaration de sortie Cet article est reproduit sur : https://dev.to/diegosilva13/understanding-the-memento-design-pattern-in-java-2c72?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

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