메멘토란 뜻은 사람이나 이벤트를 기억하기 위한 물건, 기념물이다.
메멘토 패턴은 객체의 히스토리를 관리하고 싶을 때 사용한다.
메멘토 패턴을 이용하면 객체의 상태를 특정 시점에 저장하고, 필요할 때 그 상태로 되돌릴 수 있다.
import Foundation
class CatMemento {
let uuid: UUID
let createdTime: Date
let age: Int
let height: Int
init(age: Int, height: Int) {
self.uuid = UUID()
self.createdTime = Date()
self.age = age
self.height = height
}
}
class Cat {
var age: Int
var height: Int
init(age: Int, height: Int) {
self.age = age
self.height = height
}
func speak() {
print("\(self.age) year old, \(self.height) cm, meow")
}
func createMemento() -> CatMemento {
return CatMemento(age: self.age, height: self.height)
}
func restore(memento: CatMemento) {
self.age = memento.age
self.height = memento.height
}
}
var catHistory = [CatMemento]()
let cat = Cat(age: 0, height: 10)
catHistory.append(cat.createMemento())
cat.age = 1
cat.height = 25
catHistory.append(cat.createMemento())
cat.age = 2
cat.height = 50
catHistory.append(cat.createMemento())
cat.speak()
cat.restore(memento: catHistory[0])
cat.speak()
//2year old, 50cm, meow
//0year old, 10cm, meow