模式“快照”

在这篇文章中,我将描述“快照”模式。或“纪念品”

此模式指的是“行为”模式。设计模式。

假设我们正在开发一个图形编辑器,并且我们需要添加根据用户命令回滚操作的功能。同样非常重要的是,在实现此模式时,系统组件无权访问回滚“操作”的内部状态,其他系统组件只能访问快照对象而无法更改;其内部状态,提供清晰、简单的外部接口。为了解决这个问题,使用了“快照”模式。或“守护者”。

工作示例“快照”介绍如下:


单击时,会出现一个精灵,单击卷曲的箭头时,操作会被取消–精灵消失了。该示例由三个类组成:

  1. 显示精灵和图形界面的画布。
  2. 屏幕控制器,它处理点击并控制屏幕的逻辑。
  3. 如有必要,可使用屏幕控制器回滚每次更改后持续存在的画布状态。

在模式“快照”的上下文中课程有:

  1. 画布–源中,此类的状态保存为“快照”,以便以后根据请求回滚。此外,源必须能够在向其传输“快照”时恢复状态。
  2. 控制器保管人,此类知道如何以及何时保存/回滚状态。
  3. 状态–快照,一个存储源状态的类,加上日期信息或可以精确建立回滚顺序的索引。

该模式的一个重要特征是,只有源才能访问快照中已保存状态的内部字段,这是保护快照免受外部更改(来自想要绕过封装进行更改的开发人员的更改)所必需的; ,破坏系统逻辑)。为了实现封装,使用内置类,并且在 C++ 中,它们使用指定友元类的功能。就我个人而言,我为 Rise 实现了一个没有封装的简单版本,并在为 Swift 实现时使用 Generic。在我的版本中– Memento 仅将其内部状态赋予同一类状态的实体:

来源

https://refactoring.guru/design-patterns/memento

源代码

https://gitlab.com/demensdeum/patterns/< /p>

Leave a Comment

Your email address will not be published. Required fields are marked *