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

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

备忘录模式

一. 备忘录模式

1.1 定义

  • 在不破坏封闭性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态.

1.2 角色

  • 备忘录(Memento):用于存储发起者对象的内部状态.
  • 发起者(Orginator):创建备忘录,记录或恢复自身状态.
  • 管理者(CareTaker):负责管理备忘录.

二. 具体实现

2.1 创建备忘录类

public class Memento {        private String state;        public Memento(String state){            this.state = state;        }        public String getState() {            return state;        }    }

2.2 创建发起者类

public class Originator {        private String state;        public void setState(String state) {            System.out.println("state changed : " + state);            this.state = state;        }        public Memento save(){            return new Memento(state);        }    }

2.3 创建管理者类

public class CareTaker {        private Memento memento;        public void save(Memento memento){            System.out.println("Memento save ..." + memento.getState());            this.memento = memento;        }        public Memento read(){            System.out.println("Memento read ..." + memento.getState());            return memento;        }    }

2.4 调用

public static void main(String[] args) {        Originator originator = new Originator();        CareTaker careTaker = new CareTaker();        originator.setState("1");        careTaker.save(originator.save());        originator.setState("2");        careTaker.read();    }

2.5 输出

state changed : 1    Memento save ...1    state changed : 2    Memento read ...1

三. 优缺点

3.1 优点

  • 可以恢复到之前的状态.

3.2 缺点

  • 耗费资源.

四. 源码

https://github.com/Seasons20/DisignPattern.git

转载地址:http://wskix.baihongyu.com/

你可能感兴趣的文章
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>