La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés

Presentaciones similares


Presentación del tema: "MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés"— Transcripción de la presentación:

1 MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés
Victoria Pasichnyk

2 Introducción Memento es un patrón de comportamiento, lo cual significa que esta relacionado con el flujo de control del sistema. La forma de organizar el flujo de control puede derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema.

3 Propósito Este patrón tiene como finalidad almacenar el estado de un objeto (o del sistema completo) en un momento dado de manera que se pueda restaurar en ese punto de manera sencilla. Para ello se mantiene almacenado el estado del objeto para un instante de tiempo en una clase independiente de aquella a la que pertenece el objeto (pero sin romper la encapsulación), de forma que ese recuerdo permita que el objeto sea modificado y pueda volver a su estado anterior.

4 Motivación El patrón Memento se usa para:
Poder restaurar el sistema desde estados pasados. Para facilitar el hacer y deshacer de determinadas operaciones, para lo que habrá que guardar los estados anteriores de los objetos sobre los que se opere (o bien recordar los cambios de forma incremental).

5 Motivación: ejemplo ¿Cómo se deshace una operación en un editor gráfico?

6 Motivación: ejemplo Si queremos volver al estado original mediante cálculos geométricos, el resultado podría ser distinto al esperado. Por ejemplo:

7 ¡¡¡Podemos conseguir una solución eficiente implementando
el comando “undo” con MEMENTO!!!

8 Estructura Memento permite almacenar (parte de) el estado de Creador (Originator). Ofrece dos interfaces distintas: una estrecha para el Conserje (Caretaker) y una extendida para Creador. El Creador es capaz de crear objetos Memento con información sobre su estado y restaurar éste a partir de un Memento. El Conserje se encarga de mantener los objetos Memento y en ningún caso accede a su información interna.

9 Colaboraciones Un conserje solicita un memento a un creador, lo almacena durante un tiempo y se lo devuelve a su creador, tal y como ilustra el diagrama de interacción. A veces el conserje no devolverá el memento a su creador, ya que el creador podría no necesitar nunca volver a un estado anterior. Los mementos son pasivos. Sólo el creador que creó el memento asignará o recuperará su estado.

10 Consecuencias Mantiene la encapsulación. Simplifica la clase Creador.
El uso de memento puede resultar costoso si se hacen muchas copias o las copias son voluminosas. En algunos lenguajes puede no ser trivial definir dos interfaces distintas para el memento. El objeto (conserje) que se encarga de gestionar los mementos no sabe cuánto ocupan y su almacenamiento puede provocar un coste inesperado.

11 Ejemplo de implementación
El siguiente programa en Java ilustra el uso de "undo" con el patrón Memento. Intervienen tres clases: la clase Creador es una clase que cambia de estado; la clase Conserje se encarga de registrar los cambios del Creador; Memento guarda el objeto a salvaguardar.

12 Ejemplo: clase Memento
class Memento { private String estado; public Memento(String estadoParaSalvar) { estado = estadoParaSalvar; } public String getEstadoSalvado() { return estado;

13 Ejemplo: clase Creador
class Creador { private String estado; public void set(String estado) { System.out.println(“Creador: Asignando el estado "+estado); this.estado = estado; } public Memento salvarEnMemento() { System.out.println(“Creador: Salvando en Memento."); return new Memento(estado); public void restaurarDesdeMemento(Memento m) { estado = m.getEstadoSalvado(); System.out.println(“Creador: Estado después de restaurar desde Memento: "+estado); }

14 Ejemplo: clase Conserje
class Conserje { private ArrayList<Memento> estadosSalvados = new ArrayList<Memento>(); public void añadirMemento(Memento m) { estadosSalvados.add(m); } public Memento getMemento(int indice) { return estadosSalvados.get(indice);

15 Ejemplo: main class MementoEjemplo {
public static void main(String[] args) { Conserje conserje = new Conserje(); Creador creador = new Creador(); creador.set(“Estado1"); creador.set(“Estado2"); conserje.añadirMemento(creador.salvarEnMemento()); creador.set(“Estado3"); conserje.añadirMemento(creador.salvarEnMemento()); creador.set(“Estado4"); creador.restaurarDesdeMemento(conserje.getMemento(1)); }

16 Ejemplo: resultado de la ejecución
La salida por pantalla es: Creador : Asignando el estado Estado1 Creador : Asignando el estado Estado2 Creador : Salvando en Memento. Creador : Asignando el estado Estado3 Creador : Asignando el estado Estado4 Creador : Estado después de restaurar desde Memento : Estado3

17 Conclusión Utilizando el patrón Memento se puede encapsular el estado interno de un objeto en otro objeto distinto, y encapsularlo de forma que ese segundo objeto sólo pueda ser utilizado por el objeto que lo creó.


Descargar ppt "MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés"

Presentaciones similares


Anuncios Google