Latest web development tutorials

Motif Memento

mode Mémo (Pattern Memento) pour enregistrer un état d'un objet en vue de restaurer l'objet au moment opportun. modèles de Mémorandum appartiennent les comportements.

introduction

Intention: Sans violer l' encapsulation de capturer l'état interne d'un objet, et enregistrer l'état extérieur de l'objet.

Principalement pour résoudre: le modèle est le soi-disant mémorandum sans détruire le paquet, capturer l' état interne d'un objet, et enregistrer l'état en dehors de l'objet afin que l'objet peut ensuite être restauré à un état précédemment enregistré.

Quand utiliser: plusieurs fois nous avons toujours besoin d'enregistrer l'état interne d'un objet, dans le but de le faire est de permettre aux utilisateurs d'annuler l' opération incertaine ou incorrecte, peut être restauré à son état d' origine afin qu'il a «regret» de manger.

Comment réparer: un mémo par classe conçu pour stocker l'état d'objet.

Code de la clé:les clients ne se couplent pas avec la classe de mémo, associée à la classe de gestion mémo.

Exemples d'application: 1, le regretter plus tard.2, lors de la lecture des archives de jeu. 3, Fenêtres Lane CTRI + z. 4, IE dans le dos. 4, la base de données de gestion des transactions.

Avantages: 1, pour fournir aux utilisateurs un moyen de restaurer l'état du mécanisme qui permet aux utilisateurs d'être plus pratique de revenir à une histoire de l'Etat.2, pour parvenir à un ensemble d'informations, de sorte que l'utilisateur n'a pas besoin d'être préoccupé par l'état de conservation des détails.

Inconvénients: consomment des ressources.Si les variables membres de la classe aussi, est tenu de prendre une part relativement importante des ressources, et chaque fois que vous enregistrez consomme une certaine quantité de mémoire.

Scénarios d' utilisation:1, la nécessité de sauvegarder / restaurer l'état pertinent des données de scène. 2, il est prévu une opération de restauration.

Note: 1, afin de respecter les principes de Demeter, également ajouter une note de gestion de classe.2, afin d'économiser de la mémoire, vous pouvez utiliser le mode + mémo modèle prototype.

réalisation

mode Mémo utilise trois classesMemento,princeps etgardien.Memento contenant l'objet à restaurer dans l'état. Originator objet Memento est créé et stocké dans l'état. objet de gardien est responsable de la restauration des objets d'état Memento.

MementoPatternDemo,nos classes de démonstration utilisantCaretakeretOriginatorobjet pour afficher l'état de la récupération de l' objet.

modèle de protocole diagramme UML

Etape 1

Créer une classe de Memento.

Memento.java

public class Memento {
   Etat de private String;

   Memento publique (Etat String) {
      this.state = état;
   }

   public String getState () {
      Etat de retour;
   }	
}

Etape 2

Créer classe Originator.

Originator.java

public class Originator {
   Etat de private String;

   setState public void (Etat String) {
      this.state = état;
   }

   public String getState () {
      Etat de retour;
   }

   publique Memento saveStateToMemento () {
      return new Memento (état);
   }

   public void getStateFromMemento (Memento Memento) {
      state = Memento.getState ();
   }
}

Etape 3

Créer la classe GARDIEN.

CareTaker.java

import java.util.ArrayList;
import java.util.List;

public class GARDIEN {
   Liste privée <Memento> mementoList = new ArrayList <Memento> ();

   vide add publique (Etat Memento) {
      mementoList.add (état);
   }

   Memento publique get (int index) {
      retour mementoList.get (index);
   }
}

Etape 4

UtilisezCaretakeretprincepsobjets.

MementoPatternDemo.java

public class MementoPatternDemo {
   main (String [] args) {public static void
      Originator donneur = new Originator ();
      Caretaker Caretaker = new Caretaker ();
      originator.setState ( "État n ° 1");
      originator.setState ( "État n ° 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "État n ° 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "État n ° 4");

      System.out.println ( "Etat actuel:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "First sauvé Etat:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "Second sauvé Etat:" + originator.getState ());
   }
}

Etape 5

Vérifiez la sortie.

État actuel: État n ° 4
État d'abord sauvé: État # 2
State Second sauvé: État n ° 3