设计模式-备忘录模式
备忘录模式看似不常见,其实挺常见的;比如著名的React 的时间旅行功能,就是备忘录模式的体现;还有一些游戏的存档、读档功能也是备忘录模式
例子:
先创建一个用于存档英雄血量的类: 时刻档类
public class Memento {
// 英雄血量
private int bloodState;
public Memento(int bloodState){
this.bloodState = bloodState;
}
public int getState(){
return bloodState;
}
}
再来一个英雄类
public class Hero {
// 初始一千点血
private int bloodState = 1000;
// 掉血
public void decrease(int dec){
this.bloodState -= dec;
}
// 加血
public void increase(int inc) {
this.bloodState += inc;
}
public int getBloodState() {
return bloodState;
}
// 存档
public Memento saveStateToMemento(){
return new Memento(this.bloodState);
}
// 读档
public void getStateFromMemento(Memento Memento){
this.bloodState = Memento.getState();
}
}
存档管理类
public class MementoTaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
使用
public class MementoPatternDemo {
public static void main(String[] args) {
Hero hero = new Hero();
MementoTaker mementoTaker = new MementoTaker();
hero.decrease(100);
hero.increase(50);
mementoTaker.add(hero.saveStateToMemento());
hero.decrease(100);
mementoTaker.add(hero.saveStateToMemento());
hero.increase(10);
System.out.println("Current State: " + hero.getBloodState());
hero.getStateFromMemento(mementoTaker.get(0));
System.out.println("First saved State: " + hero.getBloodState());
hero.getStateFromMemento(mementoTaker.get(1));
System.out.println("Second saved State: " + hero.getBloodState());
}
}
这个模式本质就是为了回档,或者说像React一样 去观察某个对象数据在一顿操作、一段时间内的变化
本文作者:明月照江江的技术博客
本文链接:https://www.cnblogs.com/gradyblog/p/15357932.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步