備忘錄模式,即保存某個對象內部狀態的拷貝,這樣以後就可以將該對象恢復到原先的狀態。
模式結構
發起者角色(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