通俗易懂设计模式解析——备忘录模式
目录
前言
今天我们来看看备忘录模式【MementoPattern】,我们平时写文档的时候一不小心写错了一些字或者删除了一些东西怎么办呢?不用怕、Windows里面提供了Ctrl+Z,后退一步,可以一直后退。这个东西怎么实现的呢?我们记得之前讲过一个命令模式。命令保存的是发起人的具体命令(对应的行为)、我们今天讲的这个备忘录跟这个有点相似,但是备忘录模式保存的是发起人的状态(对应的数据结构、如属性)。我们没做一步操作就保存一步操作之前的数据。当我们Ctrl+Z后退时恢复前一步数据、似乎就达到了我们需要的目的。
备忘录模式介绍
一、来由
在软件系统中我们经常会遇到一些状态的转变。在某些时刻我们需要恢复、回溯之前的某个时间点的状态。如果我们使用一个公共的接口来使其他对象得到获取这个对象、会暴露对象封装的细节。那么我们如何在不破坏对象的封装性的同时恢复对象的某一时刻的状态呢?
二、意图
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
三、案例图
四、备忘录模式代码示例
我们看上面的案例图,主要包含以下三个部分:
发起人:发起人角色负责对状态的记录,包含创建和恢复备忘数据。
备忘录:负责储存发起人对象的状态、在恢复备忘数据的时候提供发起人需要的状态。
管理员:负责保存备忘录对象、负责备忘录对象、使其不能被其他对象进行访问及操作。
接下来我们看一个案例、关于手机照片备份的问题,有些时候因为操作失误引起的数据遗失问题。怎么去避免呢?对照片备份,然后在需要的时候进行备份数据恢复。我们看下如歌通过代码来实现吧:
namespace Memento_Pattern { class MementoPattern { } #region 照片数据 public class Photo {