Rust語言之GoF設計模式:備忘錄Memento模式
Memento允許製作物件狀態的快照並能在以後恢復這些狀態。
trait Memento<T> { fn restore(self) -> T; fn print(&self); } struct Originator { state: u32, } impl Originator { pub fn save(&self) -> OriginatorBackup { OriginatorBackup { state: self.state.to_string(), } } } struct OriginatorBackup { state: String, } impl Memento<Originator> for OriginatorBackup { fn restore(self) -> Originator { Originator { state: self.state.parse().unwrap(), } } fn print(&self) { println!("Originator backup: '{}'", self.state); } } fn main() { let mut history = Vec::<OriginatorBackup>::new(); let mut originator = Originator { state: 0 }; originator.state = 1; history.push(originator.save()); originator.state = 2; history.push(originator.save()); for moment in history.iter() { moment.print(); } let originator = history.pop().unwrap().restore(); println!("Restored to state: {}", originator.state); let originator = history.pop().unwrap().restore(); println!("Restored to state: {}", originator.state); } |
事件溯源 EventSourcing 屬於一種備忘錄模式,使用事件播放投射來獲得歷史上任何一個時刻的狀態,也成為時光旅行。