1.clone方式#
本文目前只介绍备忘录clone方式,多状态模式和多备忘录模式留做用到时再做记录。
1.1 定义##
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
1.2 类图##
类图
1.3实现##
1.3.1发起人角色类###
public class Originator implements Cloneable {
private Originator backup;
private String state = "";
private ArrayList<Object> arrayList = new ArrayList<Object>();
public String getState() {
return this.state;
}
public void setState(String _state) {
this.state = _state;
}
public void setArrayList(Object item) {
this.arrayList.add(item);
}
public ArrayList<Object> getArrayList() {
return this.arrayList;
}
public void restoreArrayList(ArrayList<Object> items) {
this.arrayList.clear();
for(Object item : items) {
this.arrayList.add(item);
}
}
public void createMemtor() {
this.backup = this.clone();
}
public void restoreMemtor() {
this.setState(this.backup.getState());
this.restoreArrayList(this.backup.arrayList);
}
public Originator clone() {
try {
Originator originator = (Originator) super.clone();
originator.arrayList = (ArrayList<Object>) this.arrayList.clone();
return originator;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
}
1.3.2客户端类###
public class Client {
public static void main(String args[]) {
Originator originator = new Originator();
originator.setArrayList("hehe");
originator.createMemtor();
System.out.println(originator.getArrayList());
originator.setArrayList("heihei");
System.out.println(originator.getArrayList());
originator.restoreMemtor();
System.out.println(originator.getArrayList());
}
}