Pop

Patrones de diseño software 11. Patrón comportamiento Memento

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

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...