前言
本章讲解设计模式中备忘录设计模式的相关知识
方法
1.概念
在日常开发中,如果我们开发一个公文系统,一篇公文发送出去发现发错了想要撤回来。那么就需要回复该对象原来的状态。
使用备忘录模式我们可以十分方便的做到这一点!
2.备忘录模式的实现思路
1)新建相关工程
2)创建源发器类
package memento;
/**
* 源发器类
* @author jwang
*
*/
public class People {
private String name;
private int age;
//进行备份操作
public PeopleMemento saveMemento(){
return new PeopleMemento(this);
}
//进行恢复操作
public void recovery(PeopleMemento pm){
this.name = pm.getName();
this.age = pm.getAge();
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + "]";
}
}
3)创建备忘录类
package memento;
/**
* 备忘录类
* @author jwang
*
*/
public class PeopleMemento {
private String name;
private int age;
public PeopleMemento(People people) {
this.name = people.getName();
this.age = people.getAge();
}
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;
}
}
4)创建负责人类
package memento;
import java.util.ArrayList;
import java.util.List;
/**
* 负责人类
* @author jwang
*
*/
public class CareTaker {
private List<PeopleMemento> mementoList = new ArrayList<>();
public void add(PeopleMemento peopleMemento){
this.mementoList.add(peopleMemento);
}
public PeopleMemento get(int index){
return this.mementoList.get(index);
}
}
5)编写测试代码进行测试
package memento;
public class Test {
public static void main(String[] args) {
People people = new People("张三", 12);
CareTaker careTaker = new CareTaker();//新建负责人类
careTaker.add(people.saveMemento());//进行备份
System.out.println("============修改前===========");
System.out.println(people);
//修改了之前的people对象
people.setName("李四");
people.setAge(34);
System.out.println("============修改后===========");
System.out.println(people);
//进行恢复
people.recovery(careTaker.get(0));
System.out.println("============恢复后===========");
System.out.println(people);
}
}
程序运行结果如下: