Java Reference
In-Depth Information
Memento (Chapter 19)
SOLUTION 19.1
Storing a memento as an object assumes that the application will still be running when
the user wants to restore the original object. Reasons that will force you to save a memento to
persistent storage follow.
The ability to restore an object's state has to survive a system crash.
You anticipate that the user will exit the system and will want to resume work later.
You need to reconstruct an object on another computer.
SOLUTION 19.2
Here is an implementation of createMemento() for FactorySimulator :
public List createMemento()
{
List list = new ArrayList();
Iterator i = machines.iterator();
while (i.hasNext())
{
MachineImage mi = (MachineImage) i.next();
list.add(mi.clone());
}
return list;
}
When you write a createMemento() method, you should convince yourself or your
colleagues that the method returns all the information necessary to reconstruct the receiving
object. In this example, a machine simulator can reconstruct itself from a clone, and a factory
simulator can reconstruct itself from a list of machine simulator clones.
SOLUTION 19.3
Here is a solution that performs the described behavior of the Undo button:
protected void undo()
{
if (mementos.size() > 1)
{
mementos.pop();
List s = (List) mementos.peek();
factory().restore(s);
undoButton().setEnabled(mementos.size() > 1);
vizPanel().repaint();
}
}
Note that the factory(),undoButton() , and vizPanel() method names match
the ones given in Figure 19.2. If the other methods in the GUI application work correctly, this
Search WWH ::




Custom Search