UGIdotNET Home UGIdotNET Home
UGIdotNET Blogs UGIdotNET Blogs
UGIdotNET Forum UGIdotNET Forum
MSDN Architetti MSDN Architetti
Visualizza Modifiche Visualizza Modifiche
Modifica Modifica
Stampa Stampa
Modifiche Recenti Modifiche Recenti
Sottoscrizioni Sottoscrizioni
Ufficio Oggetti Smarriti Ufficio Oggetti Smarriti
Cerca Riferimenti Cerca Riferimenti
Rinomina Rinomina
Cerca

Versioni

10/07/2007 20.27.23
-85.18.14.26
10/07/2007 20.27.19
-85.18.14.26
30/04/2006 20.09.04
MauroServienti-84.222.32.28
30/04/2006 20.08.35
-84.222.32.28
26/12/2005 15.10.56
LucaMinudel-151.47.148.149
Elenco completo versioni Elenco completo versioni
Pattern Memento
.
Summary Un design pattern che cattura lo stato interno di un oggetto per poi ripristinarlo.

Conosciuto anche come

Token.

Intento

Il design pattern Memento senza violazioni della incapsulazione cattura lo stato interno di un oggetto (Originator) portandolo all'esterno (sottoforma di Memento) cosicchè quello stato possa essere riprestinato in seguito.

La classe Memento viene istanziata e valorizzata a run-time quindi questo design pattern è classificato rispetto allo scopo (vedi ClassificazioneDeiDesignPattern#ClassiOggetti) come rivolto agli oggetti. Rispetto al fine questo questo design pattern è classificato tra i ClassificazioneDeiDesignPattern#Comportamentali .

Diagramma UML

Un'altro diagramma equivalente qui .

Motivazione

Quando è necessario esporre all'utente la funzione di undo, oppure è necessario implementare delle funzioni di rollback o di poter ripristinare lo stato di un oggetto (Originator) successivamente ad un errore o ad una interruzione, il design pattern Memento risolve questa necessità preservando l'incapsulazione dell'oggetto.

Esempi d'uso in .NET

L'esempio più noto in :NET è la serializzazione ad opera del Remoting (vedi System.Runtime.Serialization) che permette di serializzare in xml (vedi System.Runtime.Serialization.Formatters.Soap.SoapFormatter) o in formato binario (vedi System.Runtime.Serialization.Formatters.Binary.BinaryFormatter) in modo fedele l'istanza di un oggetto per poi ripristinarla.

Note sulla implementazione in .NET

L'oggetto Memento che rappresenta lo stato salvato come un dato opaco tipicamente fornisce a Originator una interfaccia estesa mentre agli altri oggetti (come Caretaker) espone una interfaccia ridotta. Mentre in C++ c'è il modificatore di visibilità friend che svolge questa funzione, in .NET e C# c'è la visibilità internal e friend che agisce solo con ganularità di assembly e non di classe.

Il design pattern Memento viene più spesso usato per salvare lo stato e ripristinarlo alla medesima istanza mentre la serializzazione salva lo stato e lo ripristina (deserializza) in una nuova istanza.

Del codice .NET di esempio è disponibile qui .

Relazione con altri design pattern

Il PatternCommand può usare il design pattern Memento per realizzare la funzione di undo.

Il design pattern Memento può essere usato dal PatternIterator per salvare lo stato della iterazione.

Vedi la mappa della RelazioneTraDesignPattern.

Approfondimenti

Quando il Memento viene salvato (o serializzato) e ripristinato (o deserializzato) in seguito oppure trasmesso ad un altro sistema, entra in gioco anche il versioning dell'oggetto Originator e del suo Memento.

Domande di approfondimento

  • Per Caretaker il Memento è un dato opaco, se Caretaker ha necessità di conoscere l'identità di un Memento e perciò deve esaminare o interrogare il contenuto di un Memento, questo che conseguenze ha, invalida il design pattern?

Link

VediAnche CatalogoDeiDesignPattern

UGIdotNETWiki

UGIdotNETWiki è il WikiWiki italiano dedicato a .NET

Se è la prima volta che senti parlare di Wiki, leggi il BenvenutoAiVisitatori e WikiInUnMinuto, oppure il ManualePassoPassoDelWiki.

Argomenti Recenti

  • PatternMemento
© 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali