注意事项:
- 备忘录的生命期,要主动管理它的生命周期,建立就要使用,不使用就删除;
- 备忘录的性能,不要在频繁建立备份的场景中使用备忘录模式,频繁创建对象时需要消耗资源的;
主要用于保存某个对象内部状态的拷贝,以便可以将该对象恢复到原先状态。
角色:
- 源发器类Originator:用于保存内部状态。
- 备忘录类Memento:用于拷贝。
- 负责人类CareTake:用于存储备忘录。
例子:从简,人物对象资料回滚。
创建人物实体类(源发器类Originator):
/**
* 源发器类Originator:用于保存内部状态。
*/
public class Person {
private String name;
private String sex;
private int age;
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//备忘操作并且返回备忘对象。
public PersonMemento memento() {
return new PersonMemento(this);
}
//回滚方法,回滚到备份时的状态
public void rollback(PersonMemento personMemento) {
this.name = personMemento.getName();
this.sex = personMemento.getSex();
this.age = personMemento.getAge();
}
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;
}
}
创建备忘录类(备忘录类Memento):
/**
* 备忘录类Memento:用于拷贝。
*/
public class PersonMemento {
private String name;
private String sex;
private int age;
public PersonMemento(Person person) {
this.name = person.getName();
this.sex = person.getSex();
this.age = person.getAge();
}
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;
}
}
创建负责人类(负责人类CareTake):
/**
* 负责人类CareTake:用于存储备忘录。
*/
public class CareTake {
//这是单次备忘,多次备忘可使用容器
private PersonMemento personMemento;
public PersonMemento getPersonMemento() {
return personMemento;
}
public void setPersonMemento(PersonMemento personMemento) {
this.personMemento = personMemento;
}
}
调用:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
/**
* 这是调用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建负责人类,用于存储备忘录。
CareTake careTake = new CareTake();
//创建对象
Person person = new Person("张三", "男", 18);
Log.d("TAG", "创建的对象:" + person.getName() + "," + person.getSex() + "," + person.getAge());
//备忘记录
careTake.setPersonMemento(person.memento());
//对刚创建的对象做修改
person.setAge(26);
Log.d("TAG", "修改的对象:" + person.getName() + "," + person.getSex() + "," + person.getAge());
//使用备忘录回滚
person.rollback(careTake.getPersonMemento());
Log.d("TAG", "回滚的对象:" + person.getName() + "," + person.getSex() + "," + person.getAge());
}
}
结果:已完成测试!有不对的地方欢迎指出,感恩。