备忘录模式,即保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。
模式结构
发起者角色(Originator):负责创建一个备忘录用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。
备忘录角色(Memento):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。
管理者角色(CareTake):负责保存好备忘录。
/**
* Created by Administrator on 2017-10-11.
* 管理者角色:负责管理备忘录类,示例只保存了一个备忘录对象,可以通过设置栈保存多个对象
*/
public class CareTaker {
private EmpMemento empMemento;
public EmpMemento getEmpMemento(){
return empMemento;
}
public void setEmpMemento(EmpMemento empMemento){
this.empMemento=empMemento;
}
}
/**
* Created by Administrator on 2017-10-11.
* 发起者角色:
*/
public class Emp {
private String name;
private int age;
private String sex;
public EmpMemento memento(){
return new EmpMemento(this);
}
public void recovery(EmpMemento empMemento){
this.name=empMemento.getName();
this.age=empMemento.getAge();
this.sex=empMemento.getSex();
}
public Emp(String name, int age, String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
/**
* Created by Administrator on 2017-10-11.
* 备忘录角色:普通javabean
*/
public class EmpMemento {
private String name;
private int age;
private String sex;
public EmpMemento(Emp emp){
this.name=emp.getName();
this.age=emp.getAge();
this.sex=emp.getSex();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
/**
* 备忘录模式(Memento)
*/
public class MementoMethodActivity extends AppCompatActivity {
/**
*
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memento_method);
CareTaker careTaker=new CareTaker();
Emp emp=new Emp("张飞",12,"男");
System.out.print(emp.getName()+emp.getAge()+emp.getSex());
careTaker.setEmpMemento(emp.memento());//进行备忘
emp.setAge(20);
emp.setSex("女");
System.out.print(emp.getName()+emp.getAge()+emp.getSex());
emp.recovery(careTaker.getEmpMemento());//数据恢复
System.out.print(emp.getName()+emp.getAge()+emp.getSex());
}
}
github地址:https://github.com/zyj18410105150/DesignMode