public String getState() {
return state;
}
public Memento saveStateToMemento() {
return (1) ;
}
public void getStateFromMemento(Memento Memento) {
state = (2) ;
}
}
class CareTaker {
private List mementoList = new ArrayList();
public (3) {
mementoList.add(state);
}
public (4) {
return mementoList.get(index);
}
}
class MementoPaneDemos {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState(“State #1”);
originator.setState(“State #2”);
careTaker.add( (5) );
originator.setState(“State #3”);
careTaker.add( (6) );
originator.setState(“State #4”);
System.out.println(“Current State:” + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println(“First saved State:” + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println(“Second saved State:” + originator.getState());
}
}
———————————————分析—————————————————————————
整体来说,难度很低。
———————————————第一问(难易度:中等)————————————————
①public Memento saveStateToMemento() {
return (1) ;
}
分析: 类名作为参数类型,这是必考的一个点
再看方法名saveStateToMemento()中,没有参数,判断出单个方法得不到什么有用的线索
一空先放着,再看第二空。
(前提:往下看完再倒回来)
发现以下信息都没什么用
参数类型是Menento,那么return 回去的也是Memento类型的一个对象
而类Originator中并没有创建一个Menento对象,即:new Memento()
再看到类Menento中,有一个有参构造方法,在创建对象时候,默认执行
综上所述,答案填new Memento(state)
———————————————第二问(难易度:送分)——————————————————
②public void getStateFromMemento(Memento Memento) {
state = (2) ;
}
分析:类名Memento作为参数类型,则需要回到类Memento进行分析,结合getStateFromMemento方法名提示
可知,该空填 Memento.getState
———————————————第三问(难易度:送分)————————————————
class CareTaker {
private List mementoList = new ArrayList();
public (3) {
mementoList.add(state);
}
分析:看到List集合,但其实没怎么用上,不要觉得难,先看我们要答什么问题
我们知道
方法规范的写法是这样的:
方法格式:
修饰符 返回值类型+ 方法名 (参数类型 参数名1,参数类型 参数名2…){
方法体语句;
return 返回值;
}
返回值类型分为两大类:
第一类,无返回值类型:void。
第二类,有返回值类型,返回值的类型就是被返回数据的类型。、
再回到原题,从**mementoList.add(state);**不难看出,add就是方法名,变量state在本类中都没有
二选一问题来了,是用 void add(Originator state ) 还是 void add( Memento state )呢?
当然是后者,因为List集合里面存的是Memento
所以答案填 void add( Memento state )
———————————————第四问(难易度:中偏低)————————————————
public (4) {
return mementoList.get(index);
}
分析:如同第三问,但需要知道的是 List<返回值类型>,
答案填 Memento get ( ?? index)
可问题又来了,index变量是什么类型的?
我们往下看代码,可以知道是出现了
careTaker.get(0)和careTaker.get(1),所以可以判断这是索引(当然,看到数字直接想到 int)
最终确定答案填 Memento get ( int index)
———————————————第五、六问————————————————
careTaker.add( (5));
careTaker.add( (6) );
分析 :从本类MementoPaneDemos往下分析
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
已知有两个构造方法,那肯定是要引用对象 的
二选一问题,用originator 或careTaker
继续往下分析
类originator中被调用了setState方法和get方法,唯独saveStateToMemento方法没被调用(可能是这个)
类careTaker中被调用了get方法和add方法(注意!该空就是写在add方法里面,必不可能是重复调用)
综上所述,答案填 originator.saveStateToMemento()
技巧:行行代码都有用,处处都是精心设计,答案就在其中。