Patrones de Comportamiento MEMENTO (RECUERDO) Comportamiento de Objetos Código de Ejemplo Ejemplo Complejo Namespace Memento.EjemploCliente Public Class MainAppReal Public Shared Sub main() Dim s As Cliente s = New Cliente() s.Nombre = "Baltasar Bastian Bux" s.Telefono = "976.123.456" s.ImporteVentas = 25000 '// Store internal state Dim m As ConserjeCliente m = New ConserjeCliente() m.Memento = s.ObtenerMemento() '// Continue changing originator s.Nombre = "Michael Ende" s.Telefono = "950.564.321" s.ImporteVentas = 50000 ' // Restore saved state s.RestaurarMemento(m.Memento) ' // Wait for user Console.Read() '------------------------------------------------------- ' Resultado en la consola de la ejecucion de este codigo '------------------------------------------------------- '[Originador] - Estableciendo Propiedad Nombre : Baltasar Bastian Bux '[Originador] - Estableciendo Propiedad Telefono : 976.123.456 '[Originador] - Estableciendo Propiedad ImporteVentas : 25000 '[Originador] - Obteniendo un Memento: '[Memento ] - Creacion '[Memento ] - Estableciendo Propiedad Nombre : Baltasar Bastian Bux '[Memento ] - Estableciendo Propiedad Telefono : 976.123.456 '[Memento ] - Estableciendo Propiedad ImporteVentas : 25000 '[Conserje ] - Almacenado el Memento '[Originador] - Estableciendo Propiedad Nombre : Michael Ende '[Originador] - Estableciendo Propiedad Telefono : 950.564.321 '[Originador] - Estableciendo Propiedad ImporteVentas : 50000 '[Conserje ] - Devolviendo el Memento '[Originador] - Restaurando un Memento: '[Originador] - Estableciendo Propiedad Nombre : Baltasar Bastian Bux '[Originador] - Estableciendo Propiedad Telefono : 976.123.456 '[Originador] - Estableciendo Propiedad ImporteVentas : 25000 '------------------------------------------------------- End Sub End Class End Namespace Namespace Memento.EjemploCliente Public Class Cliente Private _nombre As String Private _telefono As String Private _importeVentas As Double '// Properties Public Property Nombre() As String Get Return _nombre End Get Set(ByVal value As String) _nombre = value Console.WriteLine("[Originador] - Estableciendo Propiedad Nombre : {0}", _nombre) End Set End Property Public Property Telefono() As String Get Return _telefono End Get Set(ByVal value As String) _telefono = value Console.WriteLine("[Originador] - Estableciendo Propiedad Telefono : {0}", _telefono) End Set End Property Public Property ImporteVentas() As Double Get Return _importeVentas End Get Set(ByVal value As Double) _importeVentas = value Console.WriteLine("[Originador] - Estableciendo Propiedad ImporteVentas : {0}", ImporteVentas) End Set End Property '----------------------------------------------- ''' ''' Obtiene un memento con los valores de ''' los campos de la clase ''' ''' Un Objeto Memento Public Function ObtenerMemento() As MementoCliente Console.WriteLine("[Originador] - Obteniendo un Memento:") Return New MementoCliente(Nombre, Telefono, ImporteVentas) 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 MementoCliente) Console.WriteLine("[Originador] - Restaurando un Memento:") Me.Nombre = memento.Nombre Me.Telefono = memento.Telefono Me.ImporteVentas = memento.ImporteVentas End Sub End Class End Namespace Namespace Memento.EjemploCliente Public Class MementoCliente ' Campos de la clase Private _nombre As String Private _telefono As String Private _importeVentas As Double ' Constructor Public Sub New(ByVal nombre As String, ByVal telefono As String, ByVal importeVentas As Double) Console.WriteLine("[Memento ] - Creacion ") Me.Nombre = nombre Me.Telefono = telefono Me.ImporteVentas = importeVentas End Sub ' Propiedades Public Property Nombre() As String Get Return _nombre End Get Private Set(ByVal value As String) _nombre = value Console.WriteLine("[Memento ] - Estableciendo Propiedad Nombre : {0}", _nombre) End Set End Property Public Property Telefono() As String Get Return _telefono End Get Private Set(ByVal value As String) _telefono = value Console.WriteLine("[Memento ] - Estableciendo Propiedad Telefono : {0}", _telefono) End Set End Property Public Property ImporteVentas() As Double Get Return _importeVentas End Get Private Set(ByVal value As Double) _importeVentas = value Console.WriteLine("[Memento ] - Estableciendo Propiedad ImporteVentas : {0}", ImporteVentas) End Set End Property End Class End Namespace Namespace Memento.EjemploCliente ' clase conserje, almacena el menento Public Class ConserjeCliente Private _memento As MementoCliente '// Property Public Property Memento() As MementoCliente Get Console.WriteLine("[Conserje ] - Devolviendo el Memento ") Return _memento End Get Set(ByVal value As MementoCliente) Console.WriteLine("[Conserje ] - Almacenado el Memento ") _memento = value End Set End Property End Class End Namespace Patrón Memento (Recuerdo) 1