Aha!设计模式(93)-备忘录模式(1)

网友投稿 782 2022-10-12

Aha!设计模式(93)-备忘录模式(1)

Aha!设计模式(93)-备忘录模式(1)

意图

由对象根据外部环境的要求生成保存内部状态的数据并交给外部保存。外部环境在需要的时候可以将该数据返还给这个对象并恢复之前保存的状态。

动机

经常会有需求保存某个对象的内部状态。例如在某些重要的系统中,为了防止操作失误,会希望将设定内容的状态保存起来,从而在必要的时候有办法将其恢复。在很多软件中使用的undo功能也有类似的需求。恢复对象原来状态的一个必要条件就是先取得并保存对象的状态。

取得对象状态的方式有两种。一种是从外部取得。但是这种方式需要利用者了解对象的内部状态,这违反了封装的原则。可能会造成不必要的耦合关系。另外一种方式是让用户自己生成保存状态的数据,这种方式很好地维持了对象的封装,简化了利用者的工作。

例如上图中的图形编辑软件,随着用户对矩形框的拖动操作。连接线的状态会发生变化。当用户向右拖动下面的矩形框时,连接线位置也会随之发生变化。但是由于需要维持连接线和矩形框的连接关系。最终连接线停留在两个矩形的右下角和左上角。实现这个操作的取消操作并不容易:因为最后到达右侧状态的初始状态不止一种。当用户将下面的矩形框拖回原来位置的时候,软件无法知道连接线应该恢复到什么位置。

这时比较现实的方法就是保存拖动之前连接线的状态。当用户开始拖动矩形框时软件保存连接线和矩形框的状态,当需要执行撤销操作时候,软件恢复连接线和矩形框的状态即可。

如果我们将取得连接线的状态和恢复连接线的状态这两个操作都交给连接线对象自己的话,这就是备忘录模式的一个应用实例。

注:文中图片来自《设计模式》

觉得本文有帮助?请分享给更多人。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:idea设置JVM运行参数的几种方式
下一篇:C++核心准则T.20:避免定义没有明确语义的“概念”
相关文章

 发表评论

暂时没有评论,来抢沙发吧~