文章目录
0 设计模式
不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式
https://blog.csdn.net/qq_42874315/article/details/120006447
1 备忘录模式
备忘录模式主要的作用是保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
类似于:后悔药、打游戏时的存档、Windows 里的 ctri + z、浏览器中的后退、数据库的事务管理。
2 实现思路
备忘录模式使用三个类 Memento、Originator 和 CareTaker。
Memento 包含了要被恢复的对象的状态。
Originator 创建并在 Memento 对象中存储状态。
Caretaker 对象负责从 Memento 中恢复对象的状态。
3 需要的类
-
备忘录
不面向用户,用户面向管理者去调用。
需要备份的属性,属性与目标对象一致。
通过有参构造对其赋值
用get方法,获取到这些属性。
-
要备份的目标对象
自身的属性
set/get方法
将当前状态存储到备忘录的方法,返回值为备忘录类型
从备忘录中获取属性的方法,当前自身对象进行赋值(入参为备忘录)
-
备忘录管理者(链式备忘录)
一个List用来存储多个备忘录
add方法,给list中添加备忘录
get方法,通过index获取备忘录
-
测试类
给目标对象赋值
通过目标对象中的保存到备忘录的方法,获取到一个Memento对象
将这个memento对象添加到备忘录管理者中(通过管理者的添加方法)
4 具体实现
4.1 Memento(备忘录)
/**
* Memento 包含了要被恢复的对象的状态。
* @Author ChenJiahao(程序员五条)
* @Date 2021/8/27 17:53
*/
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState(){
return state;
}
}
4.2 Originator(目标对象)
/**
* Originator 创建并在 Memento 对象中存储状态。
* @Author ChenJiahao(程序员五条)
* @Date 2021/8/27 17:54
*/
public class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState(){
return state;
}
public Memento saveStateToMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
4.3 CareTaker(管理者)
/**
* Caretaker 对象负责从 Memento 中恢复对象的状态。
* @Author ChenJiahao(程序员五条)
* @Date 2021/8/27 17:57
*/
public class CareTaker {
private List<Memento> mementoList = new ArrayList<>();
public void add(Memento mementoState){
mementoList.add(mementoState);
}
public Memento get(int index){
return mementoList.get(index);
}
}
4.4 测试类
/**
* @Author ChenJiahao(程序员五条)
* @Date 2021/8/27 17:59
*/
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #3");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #4");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
}
}
5 思维导图
6 示例源码地址
https://github.com/ChenJiahao0205/design-pattern/tree/master
最后
我是通过马士兵老师的视频和菜鸟教程学习的,部分内容可能会有雷同
想阅读更多设计模式相关文章,欢迎到我的专栏【设计模式学习笔记】、【设计模式】中去查看
在23篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路
感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎关注程序员五条!