Android设计模式之(12)----备忘录模式
2017-08-25 11:15
309 查看
备忘录模式
备忘录模式属于行为模式。字面意思理解,备忘录是一个存储的东西。备忘录模式主要用于保存对象状态,便于之后的状态恢复或者使用。
典型的备忘录就犹如我们平常玩游戏存档一样,在某一时刻挑战BOSS之前满血满蓝存档,在战斗过程中如果死亡(0血0蓝),可以加载存档重新恢复状态继续挑战。
同时备忘录模式中的对象状态要保存状态的安全性完整性,因此不允许对象从外部来获取内部的状态。
Android中的状态恢复就属于备忘录模式
@Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); }
备忘录模式要保证保存的对象状态不能被对象从外部访问,保护好被保存的这些对象状态的完整性以及内部实现不向外部暴露。
使用场景
对象状态保存使用对象不允许外部访问内部状态
代码示例
(一)Player状态
public class Player { private int hp; private int mp; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getMp() { return mp; } public void setMp(int mp) { this.mp = mp; } public Player() { } //玩家状态 public void showPlayerState(Player player){ System.out.println("\n"+"当前hp:" +getHp() +"\n"+ "当前mp:" + getMp()); } //保存玩家的HP,MP public Memento saveMemento(){ Memento memento=new Memento(); memento.setHp(getHp()); memento.setMp(getMp()); return memento; } //恢复玩家的HP,MP public void restorePlayerState(Memento memento){ this.hp=memento.getHp(); this.mp=memento.getMp(); } }
(二)备忘录需要存储的状态属性
public class Memento { private int hp; private int mp; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getMp() { return mp; } public void setMp(int mp) { this.mp = mp; } }
(三)负责存储的存储人
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } public Caretaker() { } }
(四)调用方式
//战斗开始前的状态 Player player=new Player(); player.setHp(100); player.setMp(100); System.out.print("--------战斗开始前--------"); player.showPlayerState(player); System.out.print("--------战斗开始前--------"+"\n"); //负责人存储存档 Caretaker caretaker=new Caretaker(); caretaker.setMemento(player.saveMemento()); //战斗过程中血量降低到了50,魔法值50 player.setHp(50); player.setMp(50); System.out.print("\n"+"--------战斗过程中--------"); player.showPlayerState(player); System.out.print("--------战斗过程中--------"+"\n"); //战斗死亡恢复战斗之前的状态 System.out.print("\n"+"--------恢复状态后--------"); player.restorePlayerState(caretaker.getMemento()); player.showPlayerState(player); System.out.print("--------恢复状态后--------"+"\n");
(五)显示结果
--------战斗开始前-------- 当前hp:100 当前mp:100 --------战斗开始前-------- --------战斗过程中-------- 当前hp:50 当前mp:50 --------战斗过程中-------- --------恢复状态后-------- 当前hp:100 当前mp:100 --------恢复状态后--------
总结
备忘录模式可以让我们时光穿梭,回到过去。对于特定的状态恢复使用很方便
优点
可以存储状态,并且方便历史回滚
外部调用者不用关心状态存储实现细节过程
缺点
类的状态属性如果过多,保存一次就会消耗一次资源,对于内存来说资源消耗较大
github地址
相关文章推荐
- java/android 设计模式学习笔记(12)---组合模式
- Android设计模式系列(12)--SDK源码之生成器模式(建造者模式)
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(12)——备忘录模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- Java/Android 设计模式系列(12)--组合模式
- Java/Android 设计模式系列(21)--备忘录模式
- java/android 设计模式学习笔记(21)---备忘录模式
- 设计模式C++实现(12)——备忘录模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(12)——备忘录模式2
- C++与设计模式(12)——备忘录模式
- Android和设计模式:备忘录模式
- Android设计模式(十五)--备忘录模式
- 设计模式(12)---备忘录模式
- Android设计模式系列(12)--SDK源码之生成器模式(建造者模式)
- Android设计模式-备忘录模式
- Android设计模式系列(5)--备忘录模式
- Android设计模式应用--备忘录模式