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)