建设微网站多少钱,宁波 做网站,预约做家庭清洁的网站,有没有免费资源概念
备忘录模式是一种行为型设计模式#xff0c;用于捕获和存储对象的内部状态#xff0c;并在需要时将对象恢复到之前的状态。 备忘录模式允许在不暴露对象内部实现细节的情况下#xff0c;对对象进行状态的保存和恢复。
角色介绍
Originator#xff1a;原发器#x…概念
备忘录模式是一种行为型设计模式用于捕获和存储对象的内部状态并在需要时将对象恢复到之前的状态。 备忘录模式允许在不暴露对象内部实现细节的情况下对对象进行状态的保存和恢复。
角色介绍
Originator原发器负责创建备忘录对象并将其当前状态保存到备忘录中也可以从备忘录中恢复自身状态。Memento备忘录用于存储发起人的状态通常具备对发起人状态的访问权限。Caretaker管理者负责管理备忘录对象可以保存多个备忘录对象并在需要时将其提供给发起人进行状态的恢复。
UML 代码实现
/*** 备忘录*/
data class Memento(val state: String? null
)/*** 原发器*/
class Originator {var state: String? nullfun save(): Memento {return Memento(state)}fun recover(memento: Memento) {state memento.state}}/*** 看管人*/
class Caretaker {private val mementos ArrayListMemento()fun addMemento(memento: Memento) {mementos.add(memento)}fun getMemento(i: Int): Memento {return mementos[i]}
}fun main() {val originator Originator()val caretaker Caretaker()originator.state State#1originator.state State#2caretaker.addMemento(originator.save())originator.state State#3caretaker.addMemento(originator.save())originator.state State#4println(Current State:${originator.state})originator.recover(caretaker.getMemento(0))println(0 State:${originator.state})originator.recover(caretaker.getMemento(1))println(1 State:${originator.state})
}优缺点
优点
封装性简易恢复和撤销简化发起人 缺点增加内存使用性能开销复杂性
应用场景
适用于需要维护对象状态的历史记录而不想暴露复杂的内部状态。
文本编辑器绘图应用程序数据库系统游戏开发版本控制系统
总结
备忘录适用于需要保存/恢复数据的相关状态场景并提供一个可回滚的操作。 为了符合迪米特原则还需增加一个管理备忘录的类为了节省内容可使用配合原型模式使用。
参考
https://www.cnblogs.com/jiangzhaowei/p/7287359.htmlhttps://www.runoob.com/design-pattern/memento-pattern.htmlhttps://www.cnblogs.com/cativen/p/16641173.html