苏州企业名录黄页国外网站谷歌seo推广
学习设计模式不光要学习设计模式的思想,还要去深入理解,为什么要用这个设计模式。
如何深入理解?读优秀的框架代码,看别人代码,了解它们的使用场景。 - - - 博主老师(感谢他)
本文先介绍了备忘录的概念及简单实现,想找到框架源码中的备忘录实现,但没找到,可惜~
备忘录模式
- 概念
- 实现
- 思考
概念
定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到原先保存的状态。
场景:
- 保存一个对象某个时刻的状态或者部分状态
- 一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访问其内部状态。
实现
考虑一个游戏存档的例子
游戏类
public class Game {private int level = 1;public void play() {System.out.println("开始玩游戏");level ++;}public void quit() {System.out.println("退出游戏:当前玩到第" + level + "关");}public Memoto createMemoto() {Memoto memoto = new Memoto();memoto.level = level;return memoto;}public void restore(Memoto memoto) {this.level = memoto.level;System.out.println("恢复游戏:上回玩到第" + level + "关");}
}
归档类
public class Memoto {public int level;}
保存归档的类
public class Caretaker {private Memoto memoto;public Memoto getMemoto() {return memoto;}public void setMemoto(Memoto memoto) {this.memoto = memoto;}
}
测试类
public static void main(String[] args) {Game game = new Game();game.play();Caretaker caretaker = new Caretaker();caretaker.setMemoto(game.createMemoto());game.quit();// 重新启动游戏Game newGame = new Game();newGame.restore(caretaker.getMemoto());
}
输出
开始玩游戏
退出游戏:当前玩到第2关
恢复游戏:上回玩到第2关
思考
想找个框架源码里的备忘录模式使用示例,但没找到。其实我觉得备忘录模式还是比较简单的,把握住两点:1)不破坏对象的封装性; 2)拿到对象的(历史)状态 要做到这两点,所以通过中间类去实现。
[1] Android 源码设计模式解析与实战