概述
以word为例,我们经常会使用撤销和前进操作,那么意味着这个系统必然会存储其历史状态,保证撤销时能够读取,这时候就可以使用备忘录模式,也称谓快照模式。
代码实现
struct State{
int index;
std::string name;
bool is_error;
};
class StateManager{
public:
State GetLatestState(){
if(!states_.empty()){
State ret = states_.top();
states_.pop();
}
//some error log
return {};
}
void StoreState(State& state){
states_.push(state);
}
private:
std::stack<State> states_;
};
class System{
public:
void SetIndex(int index){
state_.index = index;
state_manager_.StoreState(state_;)
}
void SetName(std::string name){
state_.name = name;
state_manager_.StoreState(state_;)
}
void SetErrorState(bool error){
state_.is_error = error;
state_manager_.StoreState(state_;)
}
void RestoreState(){
state_ = state_manager_.GetLatestState();
}
void PrintState(){
std::cout<<"index: "<<state_.index<<std::endl;
std::cout<<"name: "<<state_.name<<std::endl;
std::cout<<"is_error: "<<state_.is_error<<std::endl;
}
private:
State state_;
StateManager state_manager_;
};
int main(){
System system;
system.SetIndex(0);
system.SetErrorState(false);
system.SetName("system1");
system.PrintState();
system.SetIndex(1);
system.PrintState();
system.RestoreState();
system.PrintState();
}
如果想要实现前进后退功能,可以使用vector或者循环队列来作为数据结构存储状态,实现起来也很简单。