/**
* Created by zgq on 2019/6/2 22:12
* 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态
*/
public class VideoPlay {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
//创建发起人角色
/**
* Created by zgq on 2019/6/2 22:16
* 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据
*/
public class VideoOriginator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public VideoOriginator() {
this.state = "开始播放";
}
/**
* 创建
*
* @return
*/
public VideoPlay createVideoPlay() {
VideoPlay videoPlay = new VideoPlay();
videoPlay.setState(this.state);
return videoPlay;
}
/**
* 恢复到某个状态
*
* @param videoPlay
*/
public void restore(VideoPlay videoPlay) {
this.state = videoPlay.getState();
}
}
//创建管理角色
/**
* Created by zgq on 2019/6/2 22:25
* //管理角色:对备忘录进行管理,保存和提供备忘录
*/
public class VideoCaretaker {
private VideoPlay videoPlay;
public VideoPlay getVideoPlay() {
return videoPlay;
}
public void setVideoPlay(VideoPlay videoPlay) {
this.videoPlay = videoPlay;
}
}
//使用备忘录模式
//发起人
VideoOriginator videoOriginator = new VideoOriginator();
//管理角色
VideoCaretaker videoCaretaker = new VideoCaretaker();
videoCaretaker.setVideoPlay(videoOriginator.createVideoPlay());
System.out.println(videoOriginator.getState());
videoCaretaker.getVideoPlay().setState("播放中");
videoOriginator.restore(videoCaretaker.getVideoPlay());
System.out.println(videoOriginator.getState());
videoCaretaker.getVideoPlay().setState("暂停播放");
videoOriginator.restore(videoCaretaker.getVideoPlay());
System.out.println(videoOriginator.getState());
1. 什么是备忘录模式?有什么作用?
备忘录模式指保存一个对象的状态,以确保在适当的时候恢复对象;它属于行为型设计模式。它的主要作用就是通过保存对象的状态,使得它可以恢复到对象的某个状态。比如像浏览器的回退、数据库事务机制等。
2. 如何实现?
以视频播放为例实现简单的备忘录模式,假设视频播放有开始播放、 播放中、暂停播放、播完完毕四种状态,实现代码如下: //创建备忘录
//创建发起人角色
//创建管理角色
//使用备忘录模式
3. JDK或Android的应用举例
在JDK中,java.util.Date和数据库事务操作使用了备忘录模式;在Android中,Activity#onSaveInstanceState中使用了备忘录模式来恢复数据状态。
4. 小结
备忘录模式主要用于解决需要跟踪数据状态的场景,比如IDE中的回退操作、数据库的事务操作、编辑回退操作等。主要需要了解清楚备忘录角色、发起者角色和管理者角色;备忘录指数据对象本身,其内部主要有个状态标识;而发起者角色主要是负责备忘录的创建和恢复备忘录数据;而管理者角色主要对备忘录进行管理,保存和提供备忘录。 优点:
缺点: