大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
动机
在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的实现细节.
如何实现对象状态的良好保存与回复?但同时又不会因此而破坏对象的封装性
模式定义
在不破坏封装性的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态
实例
朴素
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 createMomento(){
Memento m(state);
return m;
}
void setMomento(const Memento&n){
state = m.getState();
}
}
int main(){
Originator Originator;
//存储到备忘录
Memento mem = Originator.createMomento();
//....改变originator
//从备忘录中恢复
originator.setMomento(Memento);
}
结构
要点总结
- 备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时恢复原发器状态.
- Memento模式的核心是信息隐藏.即Originator需要向外界隐藏信息,保持其封装性.但同时又需要将状态保持到外界(Menento).
- 由于现代语言运行时(如C# , Java等)都具有相当的对象序列化支持,因此往往采用效率较高,又容易正确实现的序列化方案来实现Memento模式
笔记
- 备忘录主要解决是维持封装性的前提下 如何实现对象的状态
- 就如同拍一个快照
- 备忘录不应该随便提供接口给外部更改
- 备忘录不一定要保存所有的状态
- 备忘录模式具体实现起来很麻烦
- 有很多设计模式其实已经过时了 现在的技术比如序列化 内存编码技术已经优于备忘录模式了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169033.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...