备忘录模式 rust
备忘录模式
备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。
备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。
介绍
-
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
-
主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
-
何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态。
-
应用实例: 1、打游戏时的存档。 2、Windows 里的 ctrl + z。 3、浏览器中的后退。 4、数据库的事务管理。
实现
备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
MementoPatternDemo,我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。
rust
rust的实现和java的实现大致一样,就不再赘述了
// 设置备忘录类
#[derive(Clone)]
struct Memento{
state:String
}
// 设置创始类
struct Originator{
state:String,
}
impl Originator {
fn save_state_to_memento(&self)->Memento{
Memento { state: self.state.clone() }
}
fn get_state_from_memento(&mut self,memento:Memento){
self.state=memento.state.clone();
}
}
// 创建看护人类
struct CareTaker{
memento_list:Vec<Memento>
}
impl CareTaker {
fn add(&mut self,memento:Memento){
self.memento_list.push(memento);
}
fn get(&self,index:usize)->Memento{
self.memento_list.get(index).unwrap().clone()
}
}
fn main() {
let mut originator=Originator{state:"State #1".to_owned()};
let mut careTaker =CareTaker{memento_list:vec![]};
originator.state=String::from("State #2");
careTaker.add(originator.save_state_to_memento());
originator.state=String::from("State #3");
careTaker.add(originator.save_state_to_memento());
originator.state=String::from("State #4");
println!("Current State: {}",originator.state);
originator.get_state_from_memento(careTaker.get(0));
println!("First saved State: {}",originator.state);
originator.get_state_from_memento(careTaker.get(1));
println!("Second saved State: {}",originator.state)
}
rust仓库
https://github.com/onenewcode/design.git
本教程项目在bin文件夹下的mediator.rs文件中
- 点赞
- 收藏
- 关注作者
评论(0)