11. Patrón comportamiento Memento
- Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
- En esta ocasión veremos el patrón de diseño Memento, que es un patrón de diseño cuyo objetivo principal es mantener los diferentes estados que puede tener un objeto, permitiendo la recuperación de los mismos en el tiempo.Es decir su finalidad es 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.
- El modelo de clases que utilizaremos para el ejemplo es el siguiente:
- En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
- Os dejo el código de las diferentes clases vistas en el vídeo:
- Clase Caretaker
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Memento
{
//Clase para la gestión de objetos del tipo Memento
class Caretaker
{
private ArrayList fechas = new ArrayList();
public void agregarMemento(Memento m) { fechas.Add(m); }
public Memento dameMemento(int index) { return ((Memento)fechas[index]); }
}
}
- Clase Horas.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Memento
{
class Horas
{
private DateTime fecha;
public Memento guardarFecha()
{
return new Memento(this.fecha);
}
public void restaurarFecha(Memento memento)
{
this.fecha = memento.DameFecha();
}
public DateTime dameFecha()
{
return fecha;
}
public void asignarFecha(DateTime f)
{
this.fecha = f;
}
}
}
- Clase Memento.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Memento
{
//ESta clase
class Memento
{
private DateTime fecha;
public Memento(DateTime tiempo)
{
this.fecha = tiempo;
}
public DateTime DameFecha()
{
return this.fecha;
}
}
}
- Clase Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Memento
{
class Program
{
static void Main(string[] args)
{
//instaciamos la clase que gesitiona nuestros mementos
Caretaker caretaker = new Caretaker();
// Creamos nuestros respectivos backups.
Horas c1 = new Horas();
c1.asignarFecha(DateTime.Now);
System.Threading.Thread.Sleep(5000);
Horas c2 = new Horas();
c2.asignarFecha(DateTime.Now);
//guardamos elementos
Memento m1 = c1.guardarFecha();
caretaker.agregarMemento(m1);
caretaker.agregarMemento(c2.guardarFecha());
//obtenemos los valores
Memento memento1 = caretaker.dameMemento(0);
Memento memento2 = caretaker.dameMemento(1);
DateTime f1 = memento1.DameFecha();
DateTime f2 = memento2.DameFecha();
Console.WriteLine(f1.ToString());
Console.WriteLine(f2.ToString());
Console.ReadLine();
}
}
}
No hay comentarios:
Publicar un comentario