闲话
爷终于把23种设计模式看完啦!!!
看的比较浅,欢迎大家多提意见,后面还会持续完善这些博客
基本要点
1、定义
保存一个对象的某个状态,以便在适当的时候恢复对象
2、使用场景
word文档编辑时,出现断电这种意外情况,当我们再打开时,会发现文档恢复至断电前
3、核心
保存某个对象内部状态的拷贝,这样就可以将对象恢复至之前某个时间点的状态
4、结构
源发器类Originator:负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态,可以理解为需要备份的对象
备忘录类Memento:负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录
负责人类CareTaker:负责保存备忘录类
代码实现
首先我们定义一个源发器类
/**
* 源发器类
*/
public class Emp {
private String name;
private int age;
private String phone;
// 进行备忘操作,并返回备忘对象
public EmpMemento memento() {
return new EmpMemento(this);
}
// 定义一个数据恢复的方法,将当前对象的属性都恢复到备忘时的值
public void recover(EmpMemento empMemento) {
this.name = empMemento.getName();
this.age = empMemento.getAge();
this.phone = empMemento.getPhone();
}
public Emp(String name, int age, String phone) {
this.name = name;
this.age = age;
this.phone = phone;
}
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 getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
然后我们需要创建一个备忘录类和负责人类
/**
* 备忘录类
*/
public class EmpMemento {
private String name;
private int age;
private String phone;
// 定义一个构造方法,当创建备忘录时,需要传入一个源发器类,将源发器类的属性备份到备忘录类中
public EmpMemento(Emp emp) {
name = emp.getName();
age = emp.getAge();
phone = emp.getPhone();
}
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 getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
/**
* 负责人类,负责管理备忘录对象
*/
public class CareTaker {
// 定义一个属性存放备忘录对象
private EmpMemento memento;
// 如果要进行多次备忘,那么此处可以使用List容器对备忘录对象进行保存
private List<EmpMemento> mementoList = new ArrayList<>();
public EmpMemento getMemento() {
return memento;
}
public void setMemento(EmpMemento memento) {
this.memento = memento;
}
}
最后我们编写一个测试类进行测试
public class Client {
public static void main(String[] args) {
CareTaker careTaker = new CareTaker();
Emp emp = new Emp("十年", 18, "10086");
System.out.println("十八岁时的手机号" + emp.getPhone());
// 进行第一次备忘
careTaker.setMemento(new EmpMemento(emp));
emp.setPhone("10010");
System.out.println("属性改变之后,号码变为:" + emp.getPhone());
// 恢复至第一次的号码(即备忘录对象保存的状态)
emp.recover(careTaker.getMemento());
System.out.println("恢复后的手机号:" + emp.getPhone());
}
}
运行结果如下
如有错误,欢迎指正
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136801.html