In generale, ci sono due modi per fare ciò che ti serve:
- Memorizza lo stato dell'oggetto e
- Memorizza la sequenza di comandi che portano l'oggetto al suo stato corrente
Il primo modo è indirizzato da externalization dello stato di un oggetto. In sostanza, si scrive su una memoria esterna di qualche tipo un file con una descrizione dello stato corrente dell'oggetto:
Label at 40,10 text "Are you sure?"
Button at 40,20 size 30,10 text "OK"
Button at 40,40 size 30,10 text "Cancel"
Puoi leggere questo file e ripristinare l'oggetto allo stato corrente.
Il secondo modo è risolto memorizzando i comandi, come questo:
Add Label id 123 at 0,0
Move id 123 to 40,15
Set text id 123 "Are you crazy?"
Move id 123 to 40,10
Add Button id 124 at 0,0
Set text id 124 "Cancel"
Move id 124 to 40,40
Add Button id 125 at 0,0
Set text id 125 "OK"
Move id 125 to 40,20
Set text id 123 "Are you sure?"
Quando hai un file del genere, puoi "riprodurlo" per ottenere lo stato attuale del tuo oggetto. Ma ancora più importante, puoi usarlo per implementare "annulla" che sopravvive uscendo dall'applicazione. Se aggiungi timestamp agli eventi, otterrai anche un modo per ripristinare lo stato in un dato momento nel passato.