今天无意间看到了备忘录模式,由于之前没有接触过,出于好奇,研究了一下,简单来说就是把当前状态记录下来,作为备份,用于意外情况发生恢复用的,有点类似于回退的意思。
备忘录设计模式,总共分为三个角色:
发起人:要备份的成员,将自身的属性信息进行备份,恢复自身的属性信息等
备忘录:存储发起人要备份的属性信息
管理者:管理备忘录对象
下面以表单信息为样例进行演示:
首先是发起人类:
/**
* 发起者
*
*/
public class TableInfo {
/**编号*/
private int id;
/**名字*/
private String name;
/**工作*/
private String job;
/**地址*/
private String address;
public TableInfo(int id,String name,String job,String address){
this.id=id;
this.name=name;
this.job=job;
this.address=address;
}
/**恢复状态*/
public void recovery(Copy copy){
this.id=copy.getId();
this.name=copy.getName();
this.job=copy.getJob();
this.address=copy.getAddress();
}
/**备份状态*/
public Copy backup()
{
Copy copy=new Copy();
copy.setId(this.id);
copy.setName(this.name);
copy.setJob(this.job);
copy.setAddress(this.address);
return copy;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
下面是 备忘录类:
/**
*
*备忘录角色
*/
public class Copy {
/**编号*/
private int id;
/**名字*/
private String name;
/**工作*/
private String job;
/**地址*/
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
下面是 管理者类:
/**
* 管理者
*
*/
public class Manager {
private Copy copy;
public Copy getCopy() {
return copy;
}
public void setCopy(Copy copy) {
this.copy = copy;
}
}
下面是具体调用方式:
TableInfo tableInfo=new TableInfo(1, "Tom", "开发工程师", "北京");
Manager manager=new Manager();
manager.setCopy(tableInfo.backup());
tableInfo.setAddress("上海");
//下面是想恢复了
tableInfo.recovery(manager.getCopy());
到此也就将所有相关代码写完了,所以看起来还是非常简单的,下面简单罗列一下该设计模式的优缺点(摘自百度文库):
优点:
1. 将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚
2. 保持关键对象的数据封装
3. 3. 提供了容易实现的恢复能力
缺点:
1. 储存和恢复状态的过程可能相当耗时
用途 :
备忘录模式用于存储状态,在java中可以使用序列化。
经典例子:
游戏中途保存游戏,这时候可以调用保存当前状态方法,再读取的时候调用读取。Java序列化机制在这方面非常的方便。