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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

备忘录模式 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模式

笔记

  • 备忘录主要解决是维持封装性的前提下 如何实现对象的状态
  • 就如同拍一个快照
  • 备忘录不应该随便提供接口给外部更改
  • 备忘录不一定要保存所有的状态
  • 备忘录模式具体实现起来很麻烦
  • 有很多设计模式其实已经过时了 现在的技术比如序列化 内存编码技术已经优于备忘录模式了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jenkins使用教程

    Jenkins使用教程Jenkins是一款流行的开源持续集成(ContinuousIntegration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。本文以CentOS7环境为例,总结了Jenkins的安装与配置、邮件功能使用,并接入阿里巴巴的著名开源项目fastjson,以此演示Java项目(SVN+Maven)中FindBugs/CheckStyle/PMD等常用插件的使用、单元…

    2022年5月15日
  • 《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」

    《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」《C++面向对象程序设计》✍千处细节、万字总结文章目录《C++面向对象程序设计》✍千处细节、万字总结一、面向对象程序设计二、C++基础2.1C++的产生和特点2.2一个简单的C++示例程序2.3C++在非面向对象方面对C语言的扩充输入和输出cinconst修饰符void型指针内联函数带有默认参数值的函数函数重载作用域标识符”::”强制类型转换new和delete运算符引用三、类和对象(一)3.1类的构成3.2成员函数的定义3.3对象的定义和使用3.4构造函数与析构函数构造函数成员初始化列表

    2022年6月22日
  • pycharm linux安装[通俗易懂]

    pycharm linux安装[通俗易懂]

    2022年11月2日
  • wordpress被挂马_php绕过

    wordpress被挂马_php绕过注:本文仅供学习参考网页挂马简介网页挂马指的是把一个木马程序上传到一个网站里面,然后用木马生成器生成一个网马,放到网页空间里面,再加代码使得木马在打开网页时运行。网页挂马工作原理作为网页挂马的散布者,其目的是将木马下载到用户本地并进一步执行,当木马得到执行后,就意味着会有更多的木马被下载,且进一步被执行。这样就进入一个恶性的循环,从而使用户的电脑遭到攻击和控制。为达到目的首先要将木马下载到本地。常…

    2022年9月27日
  • linux tail 与 grep

    linux tail 与 greptail-f./a.txttail-f./a.txt./b.txttail-f./*.txttail-f./*.txt|grep–line-buffer’java’find-name’*.txt’-print0|xargs-0-t tail-f|grep–line-buffer’java’tail-10./a.txttail+10./…

    2022年6月4日
  • pycharm2019.3.3激活教程_pycharm2020.2激活码

    pycharm2019.3.3激活教程_pycharm2020.2激活码下载官网下载2019.03最新版http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows安装一路点击下一步,安装目录建议放在非C盘位置激活方式1:激活码第一次打开时,激活方式选择激活码。复制粘贴下面一整行,点击激活即可。有效期是2019年11月份,到时候会更新新的激活码。这种方式…

    2022年8月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号