1.目录结构
2.一个经典的例子,玩游戏的时候,路过一个存储点,可以保存游戏,当你往后面玩时不小心跪了,就可以返回上一个存储的地方开始。
3.
一个主要实体类Person,里面有很多属性,也有创建备份和恢复备份的方法。
Memento是个单纯的属性类,成员属性和getter setter跟Person完全一样,用与备份Person的属性。
CareTaker类用于管理备份,单一职责。
4.实现
Person.java
public class Person implements Cloneable{
private String name;
private String sex;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name,String sex,int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 保存状态
* @return
*/
public Memento save(){
return new Memento(name, sex, age);
}
/**
* 恢复状态
* @param memento
*/
public void goBack(Memento memento){
this.name = memento.getName();
this.sex = memento.getSex();
this.age = memento.getAge();
}
@Override
protected Person clone() throws CloneNotSupportedException {
Person person = (Person)super.clone();
return person;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Person[" +
"name=" + name +
",sex=" + sex +
",age=" + age +
"]";
}
public void display() {
// TODO Auto-generated method stub
System.out.println("Person[" +
"name=" + name +
",sex=" + sex +
",age=" + age +
"]");
}
}
public class Memento {
private String name;
private String sex;
private int age;
public Memento() {
}
public Memento(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
CareTaker.java
public class CareTaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}