网站icp备案证明,三亚做网站哪家好,有企业邮箱案例的网站,wordpress建站全过程动机#xff08;Motivation#xff09;
在软件构建过程中#xff0c;某些对象的状态在转换过程中#xff0c;可能由于某种需要#xff0c;要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态#xff0c;便会暴露对象的细节…动机Motivation
在软件构建过程中某些对象的状态在转换过程中可能由于某种需要要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态便会暴露对象的细节实现。
如何实现对象状态的良好保存与恢复但同时又不会因此而破坏对象本身的封装性。 模式定义
在不破坏封装性的前提下捕获一个对象的内部状态并在该状态之外保存这份状态。这样以后就可以将该对象恢复到原先保存的状态。
示例 #include string
using namespace std;class Memento {string state;//...
public:Memento(const string s) : state(s) {}string getState() const { return state; }void setState(const string s) { state s; }
};class Originator {string state;//...
public:Originator() {}Memento createMemento() {Memento m(state);return m;}void setMemento(const Memento m) { state m.getState(); }
};int main() {Originator originator;//捕获对象状态存储到备忘录Memento m originator.createMemento();//... 改变oroginator状态//从备忘录中恢复originator.setMemento(m);
}
要点总结
备忘录Memento存储原发器Originator对象内部状态在需要时恢复原发器状态。
Memento模式的核心时信息隐藏即Originator需要向外部隐藏信息保持其封装性。但同时又需要将状态保存到外界Memento。
由于现在语言运行时C#、Jave等多具有相当的对象序列化支持因此往往采用效率更高、又较容易正确实现的序列化方案来实现Memento模式。