Latest web development tutorials

patrón Memento

modo de apuntes (patrón Memento) para guardar el estado de un objeto con el fin de restaurar el objeto en el momento apropiado. patrones de orden pertenecen los patrones de comportamiento.

introducción

Intención: Sin violar la encapsulación de capturar el estado interno de un objeto, y guardar el estado fuera del objeto.

Principalmente para resolver: el modelo es el llamado memorándum sin destruir el envase, la captura del estado interno de un objeto, y guardar el estado fuera del objeto para que el objeto puede ser posteriormente restaurado a un estado guardado previamente.

Cuando se usa: muchas veces que siempre necesitan para registrar el estado interno de un objeto, con el fin de hacerlo es permitir a los usuarios cancelar la operación equivocada o mala, puede ser restaurado a su estado original, de modo que él ha "pesar" para comer.

Cómo solucionarlo: un memo por clase diseñada para almacenar el estado del objeto.

Código Clave: los clientes no se acoplan con la clase de notas, junto con la clase de gestión de notas.

Ejemplos de aplicación: 1, lamentarlo más tarde.2, cuando se reproduce el archivo de juego. 3, CTRI de Windows carril + z. 4, es decir, en la parte posterior. 4, la base de datos de gestión de transacciones.

Ventajas: 1, para proporcionar a los usuarios una manera de restaurar el estado del mecanismo que permite a los usuarios ser más sencillo de volver a una historia del estado.2, para lograr un paquete de información, de manera que el usuario no tiene que estar preocupado por el estado de conservación de los detalles.

Desventajas: consumen recursos.Si las variables miembro de la clase también, está obligado a asumir un número relativamente grandes recursos, y cada vez que se guarda va a consumir una cierta cantidad de memoria.

Escenarios de uso: 1, la necesidad de salvar / restaurar el estado correspondiente de los datos de la escena.2, se proporciona una operación de reversión.

Nota: 1, con el fin de cumplir con los principios de Demeter, también añadir una nota de gestión de la clase.2, con el fin de ahorrar memoria, puede utilizar el modo + memo modelo de prototipo.

realización

Modo de notas utiliza tres clases deMemento,iniciador ycuidador.Memento que contiene el objeto a ser restaurada en el estado. Originador Memento objeto se crea y se almacena en el estado. objeto cuidador es responsable de la restauración de objetos de estado Memento.

MementoPatternDemo,nuestras clases de demostración utilizandocuidadoryOriginadorobjeto para visualizar el estado de la recuperación de objetos.

patrón Memorando diagrama UML

Paso 1

Crear una clase Memento.

Memento.java

public class {Memento
   Estado private String;

   Memento pública (estatal String) {
      this.state = Estado;
   }

   Cadena getState pública () {
      estado de retorno;
   }	
}

Paso 2

Crear clase originador.

Originator.java

Originador public class {
   Estado private String;

   pública setstate vacío (estado String) {
      this.state = Estado;
   }

   Cadena getState pública () {
      estado de retorno;
   }

   Memento pública saveStateToMemento () {
      volver nueva Memento (estado);
   }

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

paso 3

Crear la clase cuidador.

CareTaker.java

java.util.ArrayList importación;
java.util.List importación;

Cuidador public class {
   Lista privada <Memento> mementoList = new ArrayList <Memento> ();

   public void add (estado Memento) {
      mementoList.add (estado);
   }

   Memento pública get (int index) {
      volver mementoList.get (índice);
   }
}

Paso 4

Utilicecuidadorycreadorde objetos.

MementoPatternDemo.java

MementoPatternDemo public class {
   principales argumentos (String []) {public static void
      Originador originador = new originador ();
      Cuidador cuidador cuidador = new ();
      originator.setState ( "Estado # 1");
      originator.setState ( "Estado # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "Estado # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "Estado nº 4");

      System.out.println ( "Estado actual:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "Primera salvado Estado:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "Segundo salvado Estado:" + originator.getState ());
   }
}

paso 5

Verifique la salida.

Estado actual: Estado # 4
Estado guardado en primer lugar: Estado # 2
Estado segunda guardado: Estado # 3