每天一个设计模式之备忘录模式(Memento Pattern)
顾名思义,备忘录就是保存一个状态,到需要的时候可以恢复到某一时刻的状态。
一、UML类图
参与者说明
- Originator,需要保存状态的对象;
- Memento,备忘录对象,负责保存记录(即Originator的内部状态);
- Caretaker,守护者对象,负责保存多个备忘录,使用集合管理;
代码示例
备忘录
public class Memento {private String state;public String getState() {return state;}public Memento(String state) {this.state = state;}
}
需要保存状态的类
public class Originator {private String state;public void getStateFromMemento(Memento memento) {this.state = memento.getState();}public Memento saveStateToMemento() {return new Memento(state);}public String getState() {return state;}public void setState(String state) {this.state = state;}
}
备忘录管理类
public class CareTaker {private List<Memento> mementoList = new ArrayList<>();public void add(Memento memento) {mementoList.add(memento);}public Memento get(int idx) {return mementoList.get(idx);}
}
客户类
public class Client {public static void main(String[] args) {Originator originator = new Originator();CareTaker careTaker = new CareTaker();originator.setState("state #1 --- attack value 100");careTaker.add(originator.saveStateToMemento());originator.setState("state #2 --- attack value 80");careTaker.add(originator.saveStateToMemento());originator.setState("state #3 --- attack value 50");careTaker.add(originator.saveStateToMemento());System.out.println("current state is: " + originator.getState());// back to state 1originator.getStateFromMemento(careTaker.get(0));System.out.println("current state is: " + originator.getState());}
}
测试结果
current state is: state #3 --- attack value 50
current state is: state #1 --- attack value 100Process finished with exit code 0
三、参考
- https://m.runoob.com/design-pattern/memento-pattern.html
- 韩顺平 《设计模式》
设计模式系列博文导航
一、创建型 - 5种
原型模式(Prototype Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
工厂模式(Factory Pattern)
单例模式(Singleton Pattern)
助记语:原抽建工单
二、结构型 - 8种
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
适配器模式(Adapter Pattern)
外观模式(Facade Pattern)
过滤器模式(Filter/Criteria Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
助记语:想呆室外,过桥组装
三、行为型 - 11种
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
中介者模式(Mediator Pattern)
迭代器模式(Iterator Pattern)
观察者模式(Observer Pattern)
策略模式(Strategy Pattern)
状态模式(State Pattern)
备忘录模式(Memento Pattern)
模板方法模式(Template Pattern)
访问者模式(Visitor Pattern)
助记语:责令解中谍,观测状被模仿
每天一个设计模式之备忘录模式(Memento Pattern)相关推荐
- 二十四种设计模式:备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern) 介绍 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例 有一个Message实体类 ...
- java memento_备忘录模式-Memento Pattern(Java实现)
备忘录模式-Memento Pattern Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态. 本文中的场景: 有一款游戏可以随时存档, ...
- 保留状态的秘密 - 深入了解Java备忘录模式(Memento Pattern)
文章目录 一.概述 1.1 介绍备忘录模式的定义和作用 二.角色 2.1 介绍备忘录模式中的三个角色 三.实现方法 3.1 介绍备忘录模式的实现方法 3.2 分别介绍基于类和基于接口实现备忘录模式的方 ...
- Net设计模式实例之备忘录模式(Memento Pattern)
一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...
- 设计模式之备忘录模式(Memento)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办
23种设计模式+额外常用设计模式汇总 (持续更新) Memento模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态并在该对象之外保存这个状态.这样以后就可以利用该保存的状态实施恢复操作. ...
- 【设计模式】—— 备忘录模式Memento
前言:[模式总览]----------by xingoo 模式意图 这个模式主要是想通过一个对象来记录对象的某种状态,这样有利于在其他需要的场合进行恢复. 该模式还有跟多可以扩展的地方,比如可以记录多 ...
- 23.备忘录模式(Memento Pattern)
using System; using System.Collections.Generic;namespace ConsoleApplication6 {/// <summary>/// ...
- 38备忘录模式(Memento Pattern)
对象状态的回溯: 对象状态的变化无端,如何回溯/恢复对象在某个点的状态? 动机: 在软件构建过程中,某些对象的状态在转换过程中,可能由 ...
最新文章
- maven 下载 源码和javadoc命令
- DeepMind提出新型神经网络架构,用无监督方法从视频中提取关键点 | 论文
- 儿童编程软件python-Python编程工具pycharm的使用
- Linux repo 文件学习;
- 什么是微调?什么是模型迁移?
- 笔记本暗屏维修多少钱_电视机维修|维修电视机多少钱?电视机黑屏
- SDUTOJ 【1166】打印直角三角形
- 使用邮件客户端整合日常信息
- 软件测试用例.范文,软件测试用例模板范文
- java 多线程课件_Thread_java多线程参考源码_ppt_大学课件预览_高等教育资讯网
- estore简版商城
- pyinstaller打包py遇到的问题
- hadoop集群:关于Could not obtain block:报错问题
- ARP缓存表过期问题
- ​从机械工程师到机器学习工程师,我也是个数据科学家了
- 湿化学清洗过程中晶片污染控制方法
- 短视频平台开发,将图片、视频保存到本地的相册中
- 具备听力保护作用耳机有哪些、不伤耳骨传导耳机排名
- 各种十进制转十六进制的方法
- 如何防止验证码接口被恶意攻击