您的位置:首页 > 其它

备忘录模式

2016-01-22 16:55 423 查看
今天无意间看到了备忘录模式,由于之前没有接触过,出于好奇,研究了一下,简单来说就是把当前状态记录下来,作为备份,用于意外情况发生恢复用的,有点类似于回退的意思。

备忘录设计模式,总共分为三个角色:

发起人:要备份的成员,将自身的属性信息进行备份,恢复自身的属性信息等

备忘录:存储发起人要备份的属性信息

管理者:管理备忘录对象

下面以表单信息为样例进行演示:

首先是发起人类:

/**
* 发起者
*
*/
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序列化机制在这方面非常的方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: