备忘录模式实例_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/169033.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月11日 下午8:16
下一篇 2022年8月11日 下午8:36


相关推荐

  • 【企业】掌握理查德·费曼学习法,提高学习效率

    【企业】掌握理查德·费曼学习法,提高学习效率强大的学习能力,可以让你更好地应对复杂多变的世界!1、理查德·费曼理查德·菲利普斯·费曼(RichardPhillipsFeynman),美国犹太裔理论物理学家,量子电动力学创始人之一,纳米技术之父。1965年获得诺贝尔物理学奖,从没有人怀疑过他超强、早熟的学习能力:小学刚毕业,他就开始学习初等微积分,在中学,他就学习了狭义相对论——要知道爱因斯坦提出狭义相对论的《论动体的电动力…

    2022年5月21日
    41
  • ZooKeeper 常用应用场景原理详解

    ZooKeeper 常用应用场景原理详解ZooKeeper 常用应用场景原理详解,zookepper存放数据的目录结构类似于标准的文件系统格式,如果使用过window或linux就能体会到其内部的数据结构

    2022年6月17日
    46
  • Claude 指南与资讯

    Claude 指南与资讯

    2026年3月15日
    2
  • 女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]

    女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]导语有一天和女朋友聊天,翻着手机上的软件,看电影、看编程网站,她说到:“这么多APP,怎么就没一个做文字识别很方便的呢?我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文字识别步骤很复杂,就是限制识别次数,要么就是限制编辑,很多识别软件还都是付费的,好烦“。然后程序员小哥说:“要不我给你做一个免费版本文字识别小程序?”话不多话,对象第一,开干~~~​​​正文程序原理简介:python利用百度文字识别功能,实现对上传的图片进行扫描,获取图片的文字信…

    2022年5月27日
    37
  • 简述python垃圾回收机制_理解Python垃圾回收机制

    简述python垃圾回收机制_理解Python垃圾回收机制一 垃圾回收机制 Python 中的垃圾回收是以引用计数为主 分代收集为辅 引用计数的缺陷是循环引用的问题 在 Python 中 如果一个对象的引用数为 0 Python 虚拟机就会回收这个对象的内存 执行 f1 会循环输出这样的结果 而且进程占用的内存基本不会变动 c1 ClassA 会创建一个对象 放在 0x237cf58 内存中 c1 变量指向这个内存 这时候这个内存的引用计数是 1delc1 后 c1 变量不再

    2026年3月18日
    1
  • 物联网网络架构_物联网技术有哪些

    物联网网络架构_物联网技术有哪些系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例

    2026年1月17日
    3

发表回复

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

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