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


相关推荐

  • beta分布的均值和方差_二维均匀分布的期望和方差

    beta分布的均值和方差_二维均匀分布的期望和方差均值为a+b2\frac{a+b}{2}2a+b​,总数n为(b−a)(b-a)(b−a)方差=(x−均值)2n\frac{(x-均值)^2}{n}n(x−均值)2​所以[a,b]均匀分布的方差为:∫ab(x−a+b2)2dx(b−a)\frac{\int_a^b(x-\frac{a+b}{2})^2dx}{(b-a)}(b−a)∫ab​(x−2a+b​…

    2022年9月18日
    0
  • 论latex插入图片最好的方法!

    论latex插入图片最好的方法!在写过几篇论文后总结出来的一些写论文新手都会遇到的插入图片问题的最高效的解决方法,这是本人在摸索了很多次以后总结出来的方法希望后人可以少走些弯路。毕竟这种小问题读研的时候老师师兄师姐都不会告诉你的都是要靠你自己去解决的。

    2022年6月1日
    41
  • JQuery的delegate事件参数说明[通俗易懂]

    JQuery的delegate事件参数说明[通俗易懂]JQuery的delegate事件: delegate()方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。 使用delegate()方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。 $(selector).delegate(childSelector,event,dat

    2022年10月21日
    0
  • 深入理解卷积层,全连接层的作用意义「建议收藏」

    深入理解卷积层,全连接层的作用意义「建议收藏」有部分内容是转载的知乎的,如有侵权,请告知,删除便是,但由于是总结的,所以不一一列出原作者是who。再次感谢,也希望给其他小白受益。首先说明:可以不用全连接层的。理解1:卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。理解2:从卷积网络谈起,卷积网络在形式上有一点点像咱们正在召开的“人民代表大会制度”。卷积核的个数相当于候选人,…

    2022年9月19日
    0
  • 防火墙透明模式和路由模式区别_防火墙的部署模式

    防火墙透明模式和路由模式区别_防火墙的部署模式防火墙能够工作在三种模式下:路由模式、透明模式、混合模式。如果防火墙以第三层对外连接(接口具有IP地址),则认为防火墙工作在路由模式下;若防火墙通过第二层对外连接(接口无IP地址),则防火墙工作在透明模式下;若防火墙同时具有工作在路由模式和透明模式的接口(某些接口具有IP地址,某些接口无IP地址),则防火墙工作在混合模式下。防火墙三种工作模式的简介1、路由模式当防火墙位于内部网络和外部网络之间时,需要将防火墙与内部网络、外部网络以及DMZ三个区域相连的接口分别配置成不同网段的IP地址

    2022年10月23日
    0
  • Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

    Swoole WebSocket开启SSL支持 使用wss连接

    2022年2月12日
    49

发表回复

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

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