
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
202
|
Chapter 3: Classes and Structures
savedState.Add(memento);
}
public int Count
{
get {return (savedState.Count);}
}
}
Discussion
This recipe makes use of two caretaker objects. The first, MementoCareTaker<T>,
saves a single object state that can later be used to roll an object back. The sec-
ond,
MultiMementoCareTaker<T>, uses a List<T> object to save multiple object
states, thereby allowing many levels of rollbacks to occur. You can also think of
MultiMementoCareTaker<T> as storing multiple levels of the undo/redo state.
The originator class,
SomeDataOriginator, has the state, id, and clsName fields to
store information. One thing you have to add to the class, which will not affect how
it behaves or how it is used, is a nested
Memento class. This nested class is used to
store the state of its outer class. You use a nested class so that it can access the pri-
vate fields of the outer class. This allows the
Memento object to get copies of all the
needed fields of the originator object without having to add special logic to the origi-
nator allowing it to give this field information to the
Memento object.
The
Memento class contains only private fields that mirror the fields in the outer object
that you want to store. Note that you do not have to store all fields of an outer type,
just the ...