在软件系统中,通常都会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。Memento包含了要被恢复的状态。Originator创建并在Memento中存储状态。Caretaker负责从Memento中恢复状态。
(1) public后出现的Memento是个返回类型,所以要去前段代码找Memento;
(2) 判断该空的函数名saveStateToMemento为保存状态到备忘录;
(3) Memento是返回类型,所以要返回Memento类型的对象;
(4) 在当前Originator类中没有Memento对象,所以要new一个对象;
(5) 根据前段代码找到的Memento类,在构造方法中,需要传参数;
(6) 在当前Originator类中有一个私有的 String state 变量可以使用。
(1) 该方法名为get,并且传入了Memento参数,是获取某参数;
(2) state是赋值语句,找前段Memento类的值怎么传入Memento;
(3)根据Memento类可知,通过getState()方法拿到state参数,所以调用Memento下的getState()方法;
(1) 在问题(3)中,只有函数体,没有返回值类型、名称、参数及类型,需阅读函数体;
(2) 通过函数体得知,没有return
,返回值类型是void
,功能是向list集合中添加状态的方法;
(3) 函数体中出现参数state
,并且在mementoList
实例中调用,所以要找集合的数据类型;
(4) 根据前段代码可知,集合的数据类型为Memento
,所以参数及数据类型为Memento state
(5) 去main函数中找,有没有CareTaker
实例此功能被实现?有,取方法名add
;
(1) 由问题(4)得知,需要判断返回类型、方法名、参数及类型;
(2) 函数体为集合中get获取下标元素,所以参数及类型为int index
;
(3) 又因为集合,所以返回值类型同理为Memento
;
(4) 方法名同1.3确定方法类似,寻找main
函数中的实例调用情况;
(1) 由问题(5)可以确定1.3中的方法名;
(2) 由1.3中CareTaker
类可知,该add
方法需要传入一个参数,且为Memento
类型;
(3) 在当前main
方法中只有originator
对象能返回Memento
类型;
(4) 所以要根据Originator
类中的方法,用originator
调用saveStateToMemento()
方法;
(5) saveStateToMemento()
会传入一个Memento
对象的实例化;