本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
备忘录模式是一种软件设计模式,它提供了保存和恢复对象状态的能力。它通常与撤消/重做操作结合使用。
纪念品模式是一个三层结构,由发起者、看管者和纪念品组成。
发起者是需要保存其状态的对象。看守者是负责保存和恢复发起者状态的对象。备忘录是一个不可变的对象,用于存储发起者的状态。
纪念品模式用于:
在 Kotlin 中有两种方式实现备忘录模式:
数据类是设计用来保存数据的类。数据类有许多特性使它们成为实现备忘录模式的理想选择:
copy
方法data
关键字声明数据类要使用数据类实现备忘录模式,我们需要创建一个 Memento 类来存储 Originator 类的状态。 Originator
类有一个创建 Memento
对象的 createMemento
方法和一个从 Memento
对象恢复 Originator
状态的 restoreMemento
方法。
下面是一个如何使用数据类实现备忘录模式的示例:
data class Originator(var state: String) {
fun createMemento(): Memento {
return Memento(state)
}
fun restoreMemento(memento: Memento) {
state = memento.state
}
data class Memento(val state: String)
}
密封类是可以有一个或多个子类的类。密封类是实现备忘录模式的理想选择,因为它们:
sealed
关键字声明要使用密封类实现备忘录模式,我们需要创建一个“备忘录”密封类,该类对于“发起者”的每个状态都有一个子类。 Originator
类有一个创建 Memento
对象的 createMemento
方法和一个从 Memento
对象恢复 Originator
状态的 restoreMemento
方法。
下面是一个如何使用密封类实现备忘录模式的示例:
sealed class Memento
class Originator(var state: String) {
fun createMemento(): Memento {
return when (state) {
"state1" -> State1()
"state2" -> State2()
else -> throw IllegalArgumentException("Invalid state")
}
}
fun restoreMemento(memento: Memento) {
state = when (memento) {
is State1 -> "state1"
is State2 -> "state2"
else -> throw IllegalArgumentException("Invalid memento")
}
}
class State1 : Memento
class State2 : Memento
}
在本文中,我们了解了备忘录模式以及如何使用数据类和密封类在 Kotlin 中实现它。