Datos GeekMaster
todo-java
Nacido en: mes 01/1981
Prov: Jujuy - vivo en Cba
País: Argentina
Post creados
java
Patron memento - Java
Patron State - Java
Patron Strategy - Java
Instalar JDK en Linux - Java
Instalar Maven en Linux - Java
Crear proyecto maven en 5 minutos - java
Introduccion Google Guava - Java
Inroduccion JAXB - Marshalling
Introduccion a pom.xml - Maven Java
Instalar jar externo en el repositorio maven
Tips Maven - Java
SoapUI - Testing webservices - Complemento desarrollo Java
Introduccion a Envers - Hibernate - Java
Fetch y Lazy - Hibernate - Java
HttpSessionListener - Java
Herencia en Hibernate - Java
Introduccion a CXF - Java
Mapeos relacionales en Hibernate - Java
Crear un interceptor en Struts2 - Java
Configurar Struts2 con Maven - Java
Configurar Jetty en Maven - Java
Obtener en Contexto de la apliccion - Java
Log4j - Java
Todo sobre Generics - Java
Como empezar con Maven - Java
3 formas de inyectar Spring con Struts1.x - Java
Crear File con path sin ruta absoluta - Java
Teclas acceso rapido - trucos Eclipse
Tiles con Struts2 - Java
Hola mundo en Struts 2 - Java
Que hay de nuevo en JDK 7 y NetBeans 7
Introduccion a GWT - Google Web Toolkit
frameworks web comparacion realizada por Matt Raible
Manejar Excel con Java - Apache POI
For each en Java - para diferentes versiones de java
Que es un Pool de conexiones - Benchmark
Mostrar las consultas SQL de Hibernate por consola
Introduccion JSTL - JAVA
Tags logic - Struts
Sql Nativo - Hibernate - Java
Ejemplos practicos Criteria - Hibernate - Java - PARTE 2
Ejemplos practicos Criteria - Hibernate - Java - PARTE 1
Que es un HashMap y como iterarlo en Java
Introduccion a Criteria - Hibernate - Java
trabajar una url en Java
Usar SimpleDateFormat - String to Date Java
Hibernate archivos hbm
Correr una aplicacion con Tomcat en mi PC
Que es FreeMarker - Introduccion y Tutorial para descargar
Primeros pasos con AOP - Spring
NetBeans IDE 6.9 - La manera inteligente de código!
realizar thumbnail en Linux ejecutado desde Java
Ejecutar comandos linux desde java
Como migrar un repositorio CVS a Subversion
Date4j alternativa a java.util.Date
Transacciones con Spring mediante JDBC
Error Oracle con Java ORA-12519, TNS:no appropriate service handler found en Oracle 10g XE
Validar si se ingreso numero o texto en Java
Disponible Hibernate 3.5.1-Final
Netbeans 6.9 - sus ventajas
Manejo de fechas en Java GregorianCalendar
Nuevo IDE para Java - Code Bubbles
Que es j_security_check?
Excepción java.lang.OutOfMemoryError: PermGen space failure
Evitar el maldito Deploy / Undeploy con jRebel en Glassfish
Colecciones en Java






Suscribite a mis Posts
Mejores Post
-Otro Tema-
<br /> Como solucionar el problema que se genera al hacer el rename de un archivo m...
java
Hibernate proporciona 4 formas de implementar la herencia, yo me voy a referir a una sola ...
Un pool de conexiones es un conjunto limitado de conexiones a una base, que es manejado po...
NetBeans IDE 6.9 introduce el compositor JavaFX, una herramienta de diseño visual p...
Apache CXF es un framework de servicios de Software Libre. CXF nos ayuda a construir y des...
Combinacion de teclas para obtener accesos rapidos en Eclipse, aca comparto algunas si ten...
Crear un File que obtenga un archivo que se encuentre en un directorio de nuestro proyecto...
El siguiente ejemplo muestra como integrar Struts 2 y Tiles....
Oracle
Si deseas ver las consultas que se ejecutaron en un esquema de oracle, debemos entrar como...
Gestion de proyectos
Subversion es un sistema de control de versiones libre y de código fuente abierto. ...
El uso de branches y tags en SVN nos permite una mejor organización del trabajo en ...
java
Es algo sencillo pero muchas veces util, si se te rpesento la duda de saber si el valor in...
Es imprescindible conocer las sentencias SQL que está ejecutando Hibernate para dep...
Se dice que el número 7 es el número de la perfección, y para el mund...
Una vez más, Matt Raible ha realizado una comparativa de las distintas opciones par...
Un HashMap, es una colección de objetos, (como los Arrays), pero estos no tienen or...
Por poca experiencia que tengas con Java seguramente conozcas el uso de los típicos...
Datos sobre mi Geek
30 conocimientos cargados
Última post: 11-03-2012 18:03:51 hs.
Creado: 19-02-2010 06:02:39 hs.

Datos post
3115 visitas
0 Comentarios

En:
Flog
Noticia




Patron memento - Java

Este patrón de diseño permite capturar y exportar el estado interno de un objeto para que luego se pueda restaurar, sin romper la encapsulación.
Su finalidad es almacenar el estado de un objeto (o del sistema completo) en un momento dado, de manera que se pueda restaurar posteriormente si fuese necesario. 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.

Hoy en día, muchos aplicativos permiten el "deshacer" y "rehacer" de manera muy sencilla. Para ciertos aplicativos es casi una obligación tener estas funciones y sería impensado el hecho que no las posean. Sin embargo, cuando queremos llevar esto a código puede resultar complejo de implementar. Este patrón intenta mostrar una solución a este problema.

Se usa cuando:
 

  • Se necesite restaurar el sistema desde estados pasados.
  • Se quiera 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).

Este patrón debe ser utilizado cuando se necesite salvar el estado de un objeto y tener disponible los distintos estados históricos que se necesiten. Por ello mismo, este patrón es muy intuitivo para darse cuando debe ser utilizado.
Hoy en día una gran variedad de aplicaciones poseen las opciones de "deshacer" y "rehacer". Por ejemplo, las herramientas de Microsoft Office como Word, Power Point, etc. Es imposible pensar que ciertas herramientas no tengan esta opción, como el Photoshop. También IDEs de programación como Eclipse utilizan una opción de historial local. Una solución para este problema es el patrón Memento.

Diagrama UML

 

 

 
 
Caretaker: es responsable por mantener a salvo a Memento. No opera o examina su contenido.
Memento: almacena el estado interno de un objeto Originator. El Memento puede
almacenar todo o parte del estado.
Originator: crea un objeto Memento conteniendo una fotografía de su estado
interno.


Ejemplo

Vamos a realizar un ejemplo de este patrón donde se busque salvar el nombre de una persona que puede variar a lo largo del tiempo.

 
 
 

 

 

 

 
 
 



Consecuencias

  • No es necesario exponer el estado interno como atributos de acceso público, preservando así la encapsulación.
  • Si el originador tendría que de almacenar y mantener a salvo una o muchas copias de su estado interno, sus responsabilidades crecerían y sería inmanejable.
  • El uso frecuente de Mementos para almacenar estados internos de gran tamaño, podría resultar costoso y perjudicar la performance del sistema.
  • Caretaker no puede hacer predicciones de tiempo ni de espacio.

Temas a tener en cuenta.

Si bien la implementación de un Memento no suele variar demasiado, cuando la secuencia de creación y restauración de mementos es conocida, se puede adoptar una estrategia de cambio incremental: en cada nuevo memento sólo se almacena la parte del estado que ha cambiado en lugar del estado completo.
Esta estrategia se aplica cuando memento se utiliza para mantener una lista de deshacer/rehacer.
Otra opción utilizada es no depender de índices en la colecciones y utilizar ciertos métodos no indexados como el .previus() que poseen algunas colecciones.
 
 
 
RESULTADO DE LA BUSQUEDA
Buscando resultados para:
Post sin comentarios
Deja tu comentario sobre el Post
Nombre:









Open Feedback Dialog