博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
备忘录模式(Memento)
阅读量:6496 次
发布时间:2019-06-24

本文共 2035 字,大约阅读时间需要 6 分钟。

hot3.png

主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。做个图来分析一下:

Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。Memento类是备忘录类,Storage类是存储备忘录的类,持有Memento类的实例,该模式很好理解。直接看源码:

public class Original {            private String value;            public String getValue() {          return value;      }        public void setValue(String value) {          this.value = value;      }        public Original(String value) {          this.value = value;      }        public Memento createMemento(){          return new Memento(value);      }            public void restoreMemento(Memento memento){          this.value = memento.getValue();      }  }  public class Memento {            private String value;        public Memento(String value) {          this.value = value;      }        public String getValue() {          return value;      }        public void setValue(String value) {          this.value = value;      }  }  public class Storage {            private Memento memento;            public Storage(Memento memento) {          this.memento = memento;      }        public Memento getMemento() {          return memento;      }        public void setMemento(Memento memento) {          this.memento = memento;      }  }

测试类:

public class Test {        public static void main(String[] args) {                    // 创建原始类          Original origi = new Original("egg");            // 创建备忘录          Storage storage = new Storage(origi.createMemento());            // 修改原始类的状态          System.out.println("初始化状态为:" + origi.getValue());          origi.setValue("niu");          System.out.println("修改后的状态为:" + origi.getValue());            // 回复原始类的状态          origi.restoreMemento(storage.getMemento());          System.out.println("恢复后的状态为:" + origi.getValue());      }  }

输出:

初始化状态为:egg

修改后的状态为:niu
恢复后的状态为:egg

简单描述下:新建原始类时,value被初始化为egg,后经过修改,将value的值置为niu,最后倒数第二行进行恢复状态,结果成功恢复了。其实我觉得这个模式叫“备份-恢复”模式最形象。

转载于:https://my.oschina.net/weiweiblog/blog/613699

你可能感兴趣的文章
mysql通过查看跟踪日志跟踪执行的sql语句
查看>>
Android_CodeWiki_01
查看>>
Web QQ 协议 登录加密算法 —— VC++实现
查看>>
Nutch 二次开发之parse正文内容
查看>>
代码储存
查看>>
微信公众平台对所有公众号开放自定义菜单
查看>>
Visual C++ 2012/2013的内存溢出检測工具
查看>>
ubuntu操作系统下载
查看>>
更改git bash默认的路径
查看>>
hdu 4452 Running Rabbits 模拟
查看>>
SQL Server 储存过程的output 参数
查看>>
IOS开发中多线程的使用
查看>>
xcode6 dyld_sim is not owned by root
查看>>
Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法
查看>>
{好文备份}SQL索引一步到位
查看>>
(转)径向模糊效果shader
查看>>
【原创】Kakfa utils源代码分析(三)
查看>>
51单片机实现对24C02进行页写、顺序读取并显示验证
查看>>
java加密解密
查看>>
将日期yyyy-MM-dd转为数字大写的形式
查看>>