备忘录模式是在不破坏封装的原则下,捕获一个对象的状态,在对象之外保存这个状态,在必要时恢复到这个状态。
应用场景主要是将状态恢复到之前,例如Ctrl+Z的恢复,游戏从存档重新开始,JDBC事务控制。
备忘录模式的主要角色有三个:
Originator,发起人,职责是发起一次存档,将自身的状态存放到Memeto里面;
Memento,备忘录,存储Originator的状态;
Caretaker,负责人,负责保存好备忘录,不能对备忘录的内容进行操作和访问,只能够将备忘录传递给其他对象。
个人理解,Memento可以看作是Originator的一个副本,最简单的不用模式的方法,就是在Originator实现Clone接口,使用时Clone一个副本出来。
示例代码:
客户端调用:
运行结果:
优点:
· 提供了状态的恢复机制
· 提供了状态保存状态的方法,用户不需要关心状态的保存实现
缺点:
· 消耗资源
应用场景:
备忘录模式又叫快照(snapshot)模式,因此可以用于需要保存某一时刻的状态的场景。
此外, 如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过负责人可以间接访问其内部状态。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/kingsleylam/p/6682442.html
内容来源于网络,如有侵权,请联系作者删除!