每个人都有写便签的习惯,其实这也是保存信息的一种方式,和备忘录差不多,都是提醒自己过去做过的事或者将来要做的事。
备忘录模式(Memento Pattern)保存了一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于设计模式里的行为型模式。
主要的实现形式其实很简单,为了不破坏封装性,我们再单独创建一个类来封装备份信息,然后再创建一个容器类,用来存放信息,以便今后的获取。
代码和注释如下:
import java.util.ArrayList;
import java.util.List;
//备份类,备份的信息
class Memento{
private String state;
public Memento(String state) {
super();
this.state = state;
}
public String getState() {
return state;
}
}
//被备份类(源类)
class Originator{
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento saveStatetoMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento memento){
state=memento.getState();
}
}
//存放状态的容器池(添加和获得)
class CareTaker{
private List<Memento> mementorList=new ArrayList<Memento>();
public void add(Memento state){
mementorList.add(state);
}
public Memento get(int index){
return mementorList.get(index);
}
}
public class MementoPatternDemo {
public static void main(String[] args) {
Originator originator=new Originator();
CareTaker careTaker=new CareTaker();
originator.setState("#1");
originator.setState("#2");
careTaker.add(originator.saveStatetoMemento());
originator.setState("#3");
careTaker.add(originator.saveStatetoMemento());
originator.setState("#4");
System.out.println("当前的状态:"+originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("第一次保存的状态:"+originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("第二次保存的状态:"+originator.getState());
}
}
输出:
当前的状态:#4
第一次保存的状态:#2
第二次保存的状态:#3
总结:实现的过程是很简单,主要是体会其中封装的思想。