什么是备忘录模式
所谓备忘录模式,就是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可将这个对象恢复到原先保存的状态的设计模式。
备忘录模式的实现方式
备忘录模式的实现方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。
民族英雄文天祥《正气歌》记载了一个“在齐太史简”的故事,我们先定义一个历史类:
public class History {
private String[] recorders = {"太史伯","太史仲","太史叔","太史季","南史氏"}; private int record_num = 0;//被崔杼杀害的史官数量 private String truth = "崔杼弑其君";
public History(int record_num) { this.record_num = record_num; }
/** * 发生 */ public void happen(){ Log.e("历史事件发生",truth); }
/** * 记录 */ public Memoto record(){ Log.e(recorders[record_num] + "书曰",truth); Memoto memoto = new Memoto(truth); return memoto; }
/** * 史官遇害 */ public void killRecorder(){ truth = "暴病而死"; Log.e("崔杼杀害"+recorders[record_num] + ",妄图篡改历史",truth); }
/** * 前赴后继 */ public void recordAgain(Memoto memoto){ this.truth = memoto.getTruth(); Log.e(recorders[record_num] + "嗣书",truth); }
} |
记载真相的备忘录:
public class Memoto {
private String truth;
public Memoto(String truth) { this.truth = truth; }
public String getTruth() { return truth; } } |
备忘录的操作者Caretaker:
public class Caretaker {
Memoto memoto;
public void archive(Memoto memoto){ this.memoto = memoto; }
public Memoto getMemoto(){ return memoto; }
} |
“在齐太史简”的全过程:
History history_0 = new History(0); history_0.happen();
Caretaker caretaker = new Caretaker();
caretaker.archive(history_0.record()); history_0.killRecorder();
History history_1 = new History(1); history_1.recordAgain(caretaker.getMemoto()); history_1.killRecorder();
History history_2 = new History(2); history_2.recordAgain(caretaker.getMemoto()); history_2.killRecorder();
History history_3 = new History(3); history_3.recordAgain(caretaker.getMemoto()); |
无独有偶,秦始皇灭赵之后第一件事就是把赵国的史书全部烧毁,可是那句“某年月日,秦王为赵王击缻”还是被司马迁记录下来,千古流传,这也是现实中的备忘录模式的功劳。
Android源码中的备忘录模式
(1)onSaveInstanceState
当某个Activity变得容易被系统销毁时,该Activity的onSaveInstanceState方法就会被执行,除非该Activity是被用户主动销毁的。
Android开发中如何利用备忘录模式
(1)备忘录模式给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
(2)备忘录模式实现了信息的封装,使得用户不需要关心状态的保存细节。
需要注意的几个问题
(1)备忘录模式的缺点在于消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
- Android(安卓)内功心法(1.8)——android常用设计模式之访问者模
- 微软:WP不会授权给小OEM商以及山寨厂商
- Android(安卓)内功心法(1.6)——android常用设计模式之适配器模
- Android一种实现夜间模式方式,同时解决调用recreate() 时闪屏问题
- 将你的老旧Android平板或手机改造成服务器
- Qt on Android(安卓)实现App普通全屏、沉浸模式、粘性沉浸模式
- 【Android(安卓)界面效果17】Android手机平板两不误,使用Fragment
- Android(安卓)IPC【Inter-Process Communication】机制二【Andro
- 【腾讯优测干货分享】鹅厂专家详解Android(安卓)N适配要点
随机推荐
-
Android(安卓)View框架总结(一)
-
Android开发中的一些经验总结
-
Android(安卓)4 高级编程(第3版)试读
-
Android(安卓)Binder开发实战指南之创建N
-
Android(安卓)APP基于Android(安卓)Studi
-
仿微信UI界面WeChatUI
-
Android如何自定义title样式
-
Adobe源码泄漏?3行代码搞定,Flash动画无缝
-
深入观察Android(安卓)Wear,Google 智能手
-
Android(安卓)软键盘事件imeOptions响应