Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Patrones de Comportamiento del Software (página 4)




Enviado por Pablo Turmero



Partes: 1, 2, 3, 4

Monografias.com
51
Memento
Propósito
Captura y externaliza el estado interno de un objeto, sin violar la encapsulación, de modo que el objeto puede ser restaurado a este estado más tarde.
Motivación
Algunas veces es necesario registrar el estado interno de un objeto: mecanismos checkpoints y deshacer cambios que permiten probar operaciones o recuperación de errores.

Monografias.com
52
Estructura
Memento

Monografias.com
53
Colaboración
(Gp:) : Guardian
(Gp:) : Creador
(Gp:) m : Memento
(Gp:) 1. crearMemento()
(Gp:) 1.1. new
(Gp:) 1.2. setEstado()
(Gp:) 1. setMemento(m)
(Gp:) 1.1. getEstado()

Memento

Monografias.com
54
Memento
Aplicabilidad
Una parte del estado de un objeto debe ser guardado para que pueda ser restaurado más tarde y una interfaz para obtener el estado de un objeto podría romper la encapsulación exponiendo detalles de implementación.

Monografias.com
55
Memento
Consecuencias
Mantiene la encapsulación
Simplifica la clase Creador ya que no debe preocuparse de mantener las versiones del estado interno.
Podría incurrir en un considerable gasto de memoria: encapsular y restaurar el estado no debe ser costoso.
Puede ser difícil en algunos lenguajes asegurar que sólo el Creador tenga acceso al estado del Memento.

Monografias.com
56
Memento
Implementación
Memento tiene dos interfaces, una para los creadores y otra para el resto de clases: clases amigas en C++, exportación selectiva (Eiffel), acceso paquete en Java.
Un memento puede registrar cambio incremental sobre el estado del creador: cuando se usa el patrón Command para el mecanismo undo/redo.

Monografias.com
57
Memento (Ejemplo)
package memento;

class Memento {
String estado;
Memento(String estadoAGuardar) { estado = estadoAGuardar; }
}

package memento;

class Creador {
private String estado;
public Memento crearMemento() {
return new Memento(estado);
}
public void setMemento(Memento m) {
estado = m.estado; }
}

Monografias.com
58
Memento (Ejemplo)
package otro;

class Guardian {
private ArrayList estadosGuardados = new ArrayList();
public void addMemento (Memento m) { estadosGuardados.add(m); }
public Memento getMemento (int index) {
return estadosGuardados.get(index); }
}
package otro;

class EjemploMemento {
public static void main(String[] args) {
Guardian g = new Guardian();
Creador c = new Creador();

g. addMemento(c. crearMemento());

g. addMemento(c. crearMemento() );

c. setMemento( g. getMemento(1) );
}
}

Monografias.com
59
Memento: Ejemplo Cursor
template
class Collection {
IterationState* createInitialState();
void next(IterationState*);
bool isDone(IterationState*);
G item() (IterationState*);
void append(G)
void remove(G)
//…
}

Collection cc;
IterationState* estado;

estado = cc.createInitialState();

while (!cc.isDone(estado)) {
cc.item(estado)->print();
cc.next(estado)

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter