【设计模式与Android】备忘录模式——在齐太史简
什么是备忘录模式
成都创新互联是一家专业提供滨江企业网站建设,专注与做网站、网站建设、H5建站、小程序制作等业务。10年已为滨江众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
所谓备忘录模式,就是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可将这个对象恢复到原先保存的状态的设计模式。
备忘录模式的实现方式
备忘录模式的实现方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。
民族英雄文天祥《正气歌》记载了一个“在齐太史简”的故事,我们先定义一个历史类:
public classHistory {
privateString[]recorders= {"太史伯","太史仲","太史叔","太史季","南史氏"}; private intrecord_num=0;//被崔杼杀害的史官数量 privateStringtruth="崔杼弑其君";
publicHistory(intrecord_num) { this.record_num= record_num; }
/** * 发生 */ public voidhappen(){ Log.e("历史事件发生",truth); }
/** * 记录 */ publicMemoto record(){ Log.e(recorders[record_num] +"书曰",truth); Memoto memoto =newMemoto(truth); returnmemoto; }
/** * 史官遇害 */ public voidkillRecorder(){ truth="暴病而死"; Log.e("崔杼杀害"+recorders[record_num] +",妄图篡改历史",truth); }
/** * 前赴后继 */ public voidrecordAgain(Memoto memoto){ this.truth= memoto.getTruth(); Log.e(recorders[record_num] +"嗣书",truth); }
} |
记载真相的备忘录:
public classMemoto {
privateStringtruth;
publicMemoto(String truth) { this.truth= truth; }
publicString getTruth() { returntruth; } } |
备忘录的操作者Caretaker:
public classCaretaker {
Memotomemoto;
public voidarchive(Memoto memoto){ this.memoto= memoto; }
public Memoto getMemoto(){ returnmemoto; }
} |
“在齐太史简”的全过程:
History history_0 =newHistory(0); history_0.happen();
Caretaker caretaker =newCaretaker();
caretaker.archive(history_0.record()); history_0.killRecorder();
History history_1 =newHistory(1); history_1.recordAgain(caretaker.getMemoto()); history_1.killRecorder();
History history_2 =newHistory(2); history_2.recordAgain(caretaker.getMemoto()); history_2.killRecorder();
History history_3 =newHistory(3); history_3.recordAgain(caretaker.getMemoto()); |
无独有偶,秦始皇灭赵之后第一件事就是把赵国的史书全部烧毁,可是那句“某年月日,秦王为赵王击缻”还是被司马迁记录下来,千古流传,这也是现实中的备忘录模式的功劳。
Android源码中的备忘录模式
(1)onSaveInstanceState
当某个Activity变得容易被系统销毁时,该Activity的onSaveInstanceState方法就会被执行,除非该Activity是被用户主动销毁的。
Android开发中如何利用备忘录模式
(1)备忘录模式给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
(2)备忘录模式实现了信息的封装,使得用户不需要关心状态的保存细节。
需要注意的几个问题
(1)备忘录模式的缺点在于消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
网站栏目:【设计模式与Android】备忘录模式——在齐太史简
标题URL:
http://pwwzsj.com/article/jjpsip.html