备忘录模式实例_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分布式 – 公司使用什么RPC框架,聊聊你理解的RPC原理

    分布式 – 公司使用什么RPC框架,聊聊你理解的RPC原理不啰嗦,我们直接开始!引言以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了。但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布式接口调用通讯,即不同的服务不是部署在同一个服务器上,比如订单服务在A服务上,付款服务在另一个服务上,有同步调用、也有异步调用,这个时候我们就需要远程调用不同的服务,使用的时候调用远程服务就像调用本地服务一样,引入一个jar包,就能通过this.xxx()一样调用远程服务,这背后的机制就是通.

    2022年5月12日
    30
  • POJ 2142 The Balance(扩展欧几里德解方程)

    POJ 2142 The Balance(扩展欧几里德解方程)

    2021年8月18日
    57
  • 怪盗基德三角滑翔翼设计图_第一代怪盗基德

    怪盗基德三角滑翔翼设计图_第一代怪盗基德最长上神子序列(nlogn)原题链接怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。他可以选择一个

    2022年8月8日
    10
  • Jenkins学习三:介绍一些Jenkins的常用功能

    Jenkins学习三:介绍一些Jenkins的常用功能Jenkins一些常用的功能,如:备份和恢复jenkins、移动,删除或修改jobs、Jenkins启动时的命令行参数、修改jenkins的timezone、通过脚本启动jenkins、查看jenk

    2022年8月1日
    8
  • 无需插件只使用浏览器下载b站视频

    无需插件只使用浏览器下载b站视频2017.10.07更新:由于现在bilibili更改了refer的Host并使用了防盗链,原文的方法直接下载会有403错误,在博主琢磨出新的抓包方法之前可以先使用以下的方法:在bilibili网址前加上kan,然后回车,加载出来的东西应该就很直白了。例子:地址栏中的https://www.bilibili.com/video/av11175437/加上kan以后变成https:

    2022年7月12日
    23
  • 时序数据库介绍_时序数据库公司

    时序数据库介绍_时序数据库公司首先,什么是时序数据? ​ 简单来说,时序数据就是按照时间维度索引的数据,比如车辆轨迹数据,传感器温度数据。随着物联网时代的到来,时序数据的数据量呈井喷式爆发,针对于这一数据细分的优化存储显得越来越重要。01什么是InfluxDBInfluxDB是一个开源的、高性能的时序型数据库,在时序型数据库DB-EnginesRanking上排名第一。在介绍InfluxDB之前,先来介绍下时序数据。按照时间顺序记录系统、设备状态变化的数据被称为时序数据(TimeSeriesData),如.

    2022年10月5日
    3

发表回复

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

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