当前位置:网站首页>行为型模式之备忘录模式
行为型模式之备忘录模式
2020-11-06 21:35:00 【程序猿欧文】
目录
- 定义与特点
- 结构与实现
- 模式的结构
- 模式的实现
- 应用场景
- 扩展:同原型模式混合使用
每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。
其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。
备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。
定义与特点
备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态,该模式又叫快照模式。
备忘录模式是一种对象行为型模式,其主要优点如下:
- 提供了一种可以恢复状态的机制:当用户需要时能够比较方便地将数据恢复到某个历史的状态。
- 实现了内部状态的封装:除了创建它的发起人之外,其他对象都不能够访问这些状态信息。
- 简化了发起人类:发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。
其主要缺点是:资源消耗大,如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源。
结构与实现
备忘录模式的核心是设计备忘录类以及用于管理备忘录的管理者类,现在我们来学习其结构与实现。
模式的结构
备忘录模式的主要角色如下:
- 发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
- 备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
- 管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
备忘录模式的结构图如图所示:

模式的实现
备忘录模式的实现代码如下:
class Program{ static void Main(string[] args) { Originator or = new Originator(); Caretaker cr = new Caretaker(); or.SetState("S0"); Console.WriteLine("初始状态:" + or.GetState()); cr.SetMemento(or.CreateMemento()); //保存状态 or.SetState("S1"); Console.WriteLine("新的状态:" + or.GetState()); or.RestoreMemento(cr.GetMemento()); //恢复状态 Console.WriteLine("恢复状态:" + or.GetState()); Console.Read(); }}//备忘录public class Memento{ private String state; public Memento(String state) { this.state=s.........
版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4553470
边栏推荐
- 一篇文章教会你使用Python网络爬虫下载酷狗音乐
- Helping financial technology innovation and development, atfx is at the forefront of the industry
- Recommendation system based on deep learning
- 【ElasticSearch搜索引擎】
- Introduction to Google software testing
- Analysis of query intention recognition
- Custom function form of pychar shortcut key
- Basic principle and application of iptables
- 小游戏云开发入门
- Use modelarts quickly, zero base white can also play AI!
猜你喜欢

What course of artificial intelligence? Will it replace human work?

Helping financial technology innovation and development, atfx is at the forefront of the industry

文件过多时ls命令为什么会卡住?

How to customize sorting for pandas dataframe

消息队列(MessageQueue)-分析

What is alicloud's experience of sweeping goods for 100 yuan?

有了这个神器,快速告别垃圾短信邮件

ERD-ONLINE 免费在线数据库建模工具

Construction of encoder decoder model with keras LSTM

给字节的学姐讲如何准备“系统设计面试”
随机推荐
Recommendation system based on deep learning
Pollard's Rho algorithm
Using NLP and ml to extract and construct web data
StickEngine-架构12-通信协议
Even liver three all night, jvm77 high frequency interview questions detailed analysis, this?
Flink's datasource Trilogy 2: built in connector
html+vue.js 實現分頁可相容IE
一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
使用 Iceberg on Kubernetes 打造新一代雲原生資料湖
事务的隔离级别与所带来的问题
Pattern matching: The gestalt approach一种序列的文本相似度方法
Introduction to X Window System
【:: 是什么语法?】
What are Devops
How to understand Python iterators and generators?
Asp.Net Core learning notes: Introduction
MongoDB与SQL常用语法对应表
What if the front end doesn't use spa? - Hacker News
Analysis of query intention recognition
What is the purchasing supplier system? Solution of purchasing supplier management platform