企业网站设计策划案,青岛中小微企业互联网站建设补贴,昭阳区住房和城乡建设管理局网站,wordpress注册相关文章目录 备忘录模式介绍实现javarustrust仓库 备忘录模式
备忘录#xff08;Memento#xff09;模式的定义#xff1a;在不破坏封装性的前提下#xff0c;捕获一个对象的内部状态#xff0c;并在该对象之外保存这个状态#xff0c;以便以后当需要时能将该对象恢复到原先… 文章目录 备忘录模式介绍实现javarustrust仓库 备忘录模式
备忘录Memento模式的定义在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。
备忘录模式能记录一个对象的内部状态当用户后悔时能撤销当前操作使数据恢复到它原先的状态。
介绍 意图在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态。 主要解决所谓备忘录模式就是在不破坏封装的前提下捕获一个对象的内部状态并在该对象之外保存这个状态这样可以在以后将对象恢复到原先保存的状态。 何时使用很多时候我们总是需要记录一个对象的内部状态这样做的目的就是为了允许用户取消不确定或者错误的操作能够恢复到他原先的状态。 应用实例 1、打游戏时的存档。 2、Windows 里的 ctrl z。 3、浏览器中的后退。 4、数据库的事务管理。
实现
备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
MementoPatternDemo我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。
java
步骤 1 创建 Memento 类。 Memento.java
public class Memento {private String state;public Memento(String state){this.state state;}public String getState(){return state;}
}步骤 2 创建 Originator 类。
Originator.java
public class Originator {private String state;public void setState(String state){this.state state;}public String getState(){return state;}public Memento saveStateToMemento(){return new Memento(state);}public void getStateFromMemento(Memento Memento){state Memento.getState();}
}步骤 3 创建 CareTaker 类。
CareTaker.java
import java.util.ArrayList;
import java.util.List;public class CareTaker {private ListMemento mementoList new ArrayListMemento();public void add(Memento state){mementoList.add(state);}public Memento get(int index){return mementoList.get(index);}
}步骤 4 使用 CareTaker 和 Originator 对象。
MementoPatternDemo.java
public class MementoPatternDemo {public static void main(String[] args) {Originator originator new Originator();CareTaker careTaker new CareTaker();originator.setState(State #1);originator.setState(State #2);careTaker.add(originator.saveStateToMemento());originator.setState(State #3);careTaker.add(originator.saveStateToMemento());originator.setState(State #4);System.out.println(Current State: originator.getState()); originator.getStateFromMemento(careTaker.get(0));System.out.println(First saved State: originator.getState());originator.getStateFromMemento(careTaker.get(1));System.out.println(Second saved State: originator.getState());}
}步骤 5 验证输出。
Current State: State #4
First saved State: State #2
Second saved State: State #3rust
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.statememento.state.clone();}
}
// 创建看护人类
struct CareTaker{memento_list:VecMemento
}
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 originatorOriginator{state:State #1.to_owned()};let mut careTaker CareTaker{memento_list:vec![]}; originator.stateString::from(State #2);careTaker.add(originator.save_state_to_memento());originator.stateString::from(State #3);careTaker.add(originator.save_state_to_memento());originator.stateString::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文件中