Versioni
| Conosciuto anche comeToken. IntentoIl 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 . MotivazioneQuando è 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 .NETL'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 .NETL'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 patternIl 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. ApprofondimentiQuando 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
Link | UGIdotNETWikiUGIdotNETWiki è 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 | ||||||||||||||||||||||||||||||||||||||
| © 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali | ||||||||||||||||||||||||||||||||||||||||