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 属于一种备忘录模式,使用事件播放投射来获得历史上任何一个时刻的状态,也成为时光旅行。
thalo: Rust的事件溯源套件