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

2022-09-22 18:20:07 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

备忘录模式 Motivation

  • 动机
  • 模式定义
  • 实例
  • 结构
  • 要点总结
  • 笔记

动机

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

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

模式定义

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

实例

朴素

代码语言:javascript复制
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模式

笔记

  • 备忘录主要解决是维持封装性的前提下 如何实现对象的状态
  • 就如同拍一个快照
  • 备忘录不应该随便提供接口给外部更改
  • 备忘录不一定要保存所有的状态
  • 备忘录模式具体实现起来很麻烦
  • 有很多设计模式其实已经过时了 现在的技术比如序列化 内存编码技术已经优于备忘录模式了

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169033.html原文链接:https://javaforall.cn

0 人点赞