备忘录模式实例_iphone语音备忘录无法分享

备忘录模式实例_iphone语音备忘录无法分享备忘录模式 Motivation 动机 模式定义 实例 结构 要点总结 笔记 动机 在软件构建过程中 某些对象的状态在转换过程中 可能由于某种需要 要求程序能够回溯对象之前处于某个点时的状态 如果使用一些共有接口来让其他对象得到对象的状态 便会暴露对象的实现细节 如何实现对象状态的良好保存与回复 但同时又不会因此而破坏对象的封装性 模式定义 在不破坏封装性的前提下 捕获一个对象的内部状态

备忘录模式 Motivation

动机

模式定义

实例

结构

要点总结

笔记

动机

在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的实现细节.

如何实现对象状态的良好保存与回复?但同时又不会因此而破坏对象的封装性

模式定义

在不破坏封装性的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态

实例

朴素

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模式

笔记

备忘录主要解决是维持封装性的前提下 如何实现对象的状态

就如同拍一个快照

备忘录不应该随便提供接口给外部更改

备忘录不一定要保存所有的状态

备忘录模式具体实现起来很麻烦

有很多设计模式其实已经过时了 现在的技术比如序列化 内存编码技术已经优于备忘录模式了

编程小号
上一篇 2025-01-23 19:57
下一篇 2025-01-26 18:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/134952.html