Patrones de Comportamiento MEMENTO (RECUERDO) Comportamiento de Objetos Código de Ejemplo Ejemplo Simple Namespace Memento.CodigoBasico '----------------------------------------------- ''' ''' [Patron Memento] - Objeto Cliente que usa el memento ''' Public Class MainApp '----------------------------------------------- ''' ''' Funcion Main de un Proyecto de Consola ''' Public Shared Sub main() Dim o As Originador o = New Originador o.Estado = "On" ' Store internal state Dim c As Conserje c = New Conserje() c.Memento = o.ObtenerMemento() ' Continue changing originator o.Estado = "Off" ' Restore saved state o.RestaurarMemento(c.Memento) ' Wait for user Console.Read() '---------------------------------------------- ' Resultado en la consola de la ejecucion de este codigo '---------------------------------------------- '[Originador] - Asignado el Estado = On '[Originador] - Obteniendo un Memento: '[Originador] - Asignado el Estado = Off '[Originador] - Restaurando un Memento: '[Originador] - Asignado el Estado = On '---------------------------------------------- End Sub End Class End Namespace Namespace Memento.CodigoBasico '----------------------------------------------- ''' ''' [Patron Memento] - Creador - ''' ''' ''' Crea un memento que contiene una instantánea de ''' su estado interno actual. ''' Usa el memento para volver a su estado anterior. ''' Public Class Originador '----------------------------------------------- ''' Campo de la clase Private _Estado As String '----------------------------------------------- ''' ''' Establece / Devuelve el valor del campo de la clase ''' Public Property Estado() As String Get Return _Estado End Get Set(ByVal value As String) _Estado = value Console.WriteLine("[Originador] - Asignado el Estado = " + _Estado) End Set End Property '----------------------------------------------- ''' ''' Obtiene un memento con los valores de ''' los campos de la clase ''' ''' Un Objeto Memento Public Function ObtenerMemento() As Memento Console.WriteLine("[Originador] - Obteniendo un Memento:") Return (New Memento(Estado)) End Function '----------------------------------------------- ''' ''' Restaura el valor de los campos de la clase ''' con un objeto Memento ''' ''' ''' El memento del que se leen los datos para ''' restaurar los valores de los campos de la clase ''' Public Sub RestaurarMemento(ByVal memento As Memento) Console.WriteLine("[Originador] - Restaurando un Memento:") Estado = memento.Estado End Sub End Class End Namespace Namespace Memento.CodigoBasico '----------------------------------------------- ''' ''' [Patron Memento] - Memento - ''' Guarda el estado interno del objeto Creador. ''' ''' ''' El memento puede guardar tanta información ''' del estado interno del creador como sea ''' necesario a discreción del creador ''' ''' Protege frente a accesos de otros objetos que sea ''' no sean el creador. ''' Los mementos tienen realmente dos interfaces. ''' El Conserje ve una interfaz reducida del Memento ''' -sólo puede pasar el memento a otros objetos-. ''' ''' El Creador, por el contrario, ve una interfaz sea ''' amplia, que le permite acceder a todos los datos sea ''' necesarios para volver a su estado anterior. ''' Idealmente, sólo el creador que produjo el sea ''' memento estaría autorizado a acceder al estado sea ''' interno de éste. ''' Public Class Memento '----------------------------------------------- ''' Valor del Creador que quiero guardar Private _Estado As String '----------------------------------------------- ''' ''' El Constructor ''' ''' ''' El valor del creador que quiero guardar ''' Public Sub New(ByVal estado As String) Me._Estado = estado End Sub '----------------------------------------------- ''' ''' Propiedad de solo lectura para recuperar ''' el valor del menmento ''' Public ReadOnly Property Estado() As String Get Return _Estado End Get End Property End Class End Namespace Namespace Memento.CodigoBasico '----------------------------------------------- ''' ''' [Patron Memento] - Conserje (Caretaker) - ''' Es responsable de guardar en lugar seguro el memento ''' ''' ''' Nunca examina los contenidos del memento, ''' ni opera sobre ellos. ''' Public Class Conserje '----------------------------------------------- ''' Variable local que almacena el memento ''' Observa que solo se puede almacenar un memento Private _objMemento As Memento '----------------------------------------------- ''' ''' Establece / Recupera el Memento almacenado en esta clase ''' ''' ''' ''' Public Property Memento() As Memento Get Return _objMemento End Get Set(ByVal value As Memento) _objMemento = value End Set End Property End Class End Namespace Patrón Memento (Recuerdo)