public class Emp {
private String name;
private int age;
private double salary;
public EmpMemento memento(){
return new EmpMemento(this);
}
public void recovery(EmpMemento memneto){
this.name=memneto.getName();
this.age=memneto.getAge();
this.salary=memneto.getSalary();
}
public Emp(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
public class EmpMemento {
private String name;
private int age;
private double salary;
public EmpMemento(Emp e) {
this.name = e.getName();
this.age = e.getAge();
this.salary =e.getSalary();
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
public class CareTaker {
private Stack<EmpMemento> stack=new Stack();
public EmpMemento getMemento() {
return stack.pop();
}
public void setMemento(EmpMemento memento) {
stack.add(memento);
}
}
public static void main(String[] args) {
CareTaker t=new CareTaker();
Emp e=new Emp("张三",18,1800);
System.out.println("没更改:"+e.getName()+"\t"+e.getAge()+"\t"+e.getSalary());
t.setMemento(e.memento());
e.setName("李四");
e.setAge(28);
e.setSalary(2800);
System.out.println("第一次修改后:"+e.getName()+"\t"+e.getAge()+"\t"+e.getSalary());
t.setMemento(e.memento());
e.setName("王五");
e.setAge(38);
e.setSalary(3800);
System.out.println("第二次修改后:"+e.getName()+"\t"+e.getAge()+"\t"+e.getSalary());
e.recovery(t.getMemento());
System.out.println("第一次恢复后:"+e.getName()+"\t"+e.getAge()+"\t"+e.getSalary());
e.recovery(t.getMemento());
System.out.println("第二次恢复后:"+e.getName()+"\t"+e.getAge()+"\t"+e.getSalary());
}