备忘录模式:保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
文章目录
最近我们车厂决定要扩建一个维修厂,这个维修厂可以让让用户的车恢复到之前的任意状态。是不是很牛?!
1.1 首先改造我们的车
package memento;
/************************************************
*@ClassName : Test
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/15 0015 15:41】
*@Version : 1.0.0
*************************************************/
public class CarRecord {
private String name;
public String getName() {
return name;
}
public String getNameFromMemList(int index) {
String name = MemList.getMemRecord(index).getName();
this.name = name;
return name;
}
public void changeName(String name){
this.name = name;
new MemRecord(name);
}
public CarRecord(String name) {
this.name = name;
new MemRecord(name);
}
}
这里简单说一下类中的方法作用。getNameFromMemList从备忘录中获取,车之前的名字,index是索引。changeName这个方法支持用户随意设置名字。new MemRecord(name);这条语句将名字存放到一个备忘录中。具体见下。
1.2 备份
package memento;
/************************************************
*@ClassName : Test
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/15 0015 15:41】
*@Version : 1.0.0
*************************************************/
public class MemRecord {
private String name;
public String getName() {
return name;
}
public MemRecord(String name) {
this.name = name;
MemList.addMemRecord(this);
}
}
为什么要有这个类,这个类的作用是复制一份CarRecord。你想啊,我们将同一个引用类型加到List中。那我们还能备份吗?
1.3 备忘录
你之前对车的所有操作都会存在这里。
package memento;
import java.util.ArrayList;
import java.util.List;
/************************************************
*@ClassName : Test
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/15 0015 15:41】
*@Version : 1.0.0
*************************************************/
public class MemList {
private static List<MemRecord> mems;
static{
mems = new ArrayList<>();
}
private MemList(){}
public static MemRecord getMemRecord(int index) {
return mems.get(index);
}
public static void addMemRecord(MemRecord mem) {
mems.add(mem);
}
}
1.4 恢复
package memento;
/************************************************
*@ClassName : Test
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/15 0015 15:41】
*@Version : 1.0.0
*************************************************/
public class Test {
public static void main(String[] args) {
CarRecord carRecord = new CarRecord("aaaa");
carRecord.changeName("bbbbb");
carRecord.changeName("ccccc");
carRecord.changeName("ddddd");
carRecord.changeName("eeeee");
System.out.println(carRecord.getName());
System.out.println(carRecord.getNameFromMemList(1));
System.out.println(carRecord.getName());
}
}
1.5 结果
简单运行之后,看我们的车就恢复到了bbbbb状态。heihei

参考
【菜鸟教程】:http://www.runoob.com/design-pattern/memento-pattern.html
本文原文地址:https://blog.youkuaiyun.com/baidu_30325009/article/details/85028400
本文详细介绍了备忘录模式在软件开发中的应用,通过实例演示了如何使用该模式保存和恢复对象状态,适用于需要实现撤销功能或恢复历史状态的场景。
1038

被折叠的 条评论
为什么被折叠?



