0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计模式:备忘录设计模式

冬至子 来源:墨风如雪小站 作者:墨风如雪 2023-06-06 11:19 次阅读

模式描述

备忘录设计模式(Memento Design Pattern)是一种行为型设计模式,它的主要目的是在不破坏对象封装性的前提下,捕捉和保存一个对象的内部状态,以便稍后可以将对象恢复到该状态。这种模式通常用于实现撤销和重做操作。

主要角色

1、备忘录(Memorandum) :保存了发起人的状态,从而能够在适当的时候恢复状态。2. 发起人(Originator) :创建一个备忘录,以表示其当前状态,并可以从备忘录中恢复状态。

引用场景

1.后退/前进:浏览器的后退/前进就是缓存页面状态的典型例子。2.撤销/重做:通常基于备忘录模式实现撤销和重做操作。3.快照:保存某个时间点对象的状态快照。

设计要点

1.仅仅存储状态:备忘录仅存储对象的内部状态,而不是存储对象的引用。2.完全封装:外部不会访问到备忘录类。3.避免权限问题:发起人应该具有创建和访问备忘录的权限。

优缺点

•轻松实现对象状态的快照和恢复•分离了对象与状态的保存与恢复过程•需要额外的空间来存储状态

与备忘录模式类似的模式

•原型模式:对一个对象进行克隆,产生一个与原对象类似的新对象。

Java代码示例

首先,我们创建一个发起人(Originator)类,它具有保存和恢复状态的能力:

publicclassOriginator{
privateString state;


publicvoid setState(String state){
this.state = state;
}


publicString getState(){
return state;
}


publicMemento saveStateToMemento(){
returnnewMemento(state);
}


publicvoid getStateFromMemento(Memento memento){
        state = memento.getState();
}
}

接下来,我们创建备忘录(Memento)类,用于保存发起人的状态:

publicclassMemento{
privateString state;


publicMemento(String state){
this.state = state;
}


publicString getState(){
return state;
}
}

现在,我们创建一个负责人(Caretaker)类,用于管理备忘录:

import java.util.ArrayList;
import java.util.List;


publicclassCaretaker{
privateList< Memento > mementoList =newArrayList<  >();


publicvoid add(Memento state){
        mementoList.add(state);
}


publicMementoget(int index){
return mementoList.get(index);
}
}

最后,我们在主类中使用这些类:

publicclassMementoPatternDemo{
publicstaticvoid main(String[] args){
Originator originator =newOriginator();
Caretaker caretaker =newCaretaker();


        originator.setState("State #1");
        originator.setState("State #2");
        caretaker.add(originator.saveStateToMemento());


        originator.setState("State #3");
        caretaker.add(originator.saveStateToMemento());


        originator.setState("State #4");
System.out.println("Current State: "+ originator.getState());


        originator.getStateFromMemento(caretaker.get(0));
System.out.println("First saved State: "+ originator.getState());
        originator.getStateFromMemento(caretaker.get(1));
System.out.println("Second saved State: "+ originator.getState());
}
}

扩展知识点

备忘录模式与命令模式(Command Pattern)可以结合使用,以实现更加强大的撤销/重做功能。命令模式可以用来记录操作的顺序和执行操作,而备忘录模式用来记录操作前后的状态。这样一来,我们可以轻松地在操作序列中向前或向后移动,同时还可以保留每个操作的上下文信息

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104707
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    20090
收藏 人收藏

    评论

    相关推荐

    恩智浦与Cohda无线签署CAR 2 CAR通信联盟“谅解备忘录

    恩智浦半导体和Cohda的无线今天宣布,他们已经签署的CAR 2 CAR通信联盟”谅解备忘录”(MOU)。该备忘录旨在确保欧洲车与车之间,或是汽车和交通基础设施间,无线通讯科技威廉希尔官方网站 的实施和统一
    发表于 04-17 10:10 921次阅读

    HarmonyOS开发实例:【手机备忘录

    基于用户首选项,实现了备忘录新增、更新、删除以及查找等功能。
    的头像 发表于 04-18 21:40 791次阅读
    HarmonyOS开发实例:【手机<b class='flag-5'>备忘录</b>】

    PostgreSQL操作备忘录

    PostgreSQL 操作备忘录
    发表于 05-23 08:48

    UDS诊断命令备忘录

    UDS实践性强,逻辑复杂,很多服务非要体验过一次才能理解,导致包括我在内的初学者感觉晦涩难懂,不明觉厉,因此将自己的理解写下来、整理下来,与君共勉。零、UDS诊断命令备忘录一、简介UDS
    发表于 08-26 16:09

    怎样去搭建一种基于XR806的开源桌面备忘录

    本人计划怼一个开源桌面备忘录/天气预报/相册的项目基于XR806,同时学习鸿蒙操作系统获得晕哥赠送的开发板和芯片,目前处于环境搭建阶段看起来这个芯片玩的人比较少,目前遇到了问题,不知道如何解决,希望
    发表于 12-28 06:52

    全球半导体联盟与中国半导体行业签署合作备忘录

    全球半导体联盟与中国半导体行业签署合作备忘录 全球半导体联盟(GSA)与中国半导体行业协会(CSIA)在苏州联合申明签署合作备忘录。此次合作将为促
    发表于 09-24 08:17 698次阅读

    是德科技与中国移动签署谅解备忘录

    是德科技(NYSE:KEYS)今日宣布与中国移动通信集团有限公司(CMCC)签署谅解备忘录(MoU)将全力支持 5G 终端先行者计划的实施。
    的头像 发表于 07-19 11:01 4839次阅读

    戴姆勒与百度签署谅解备忘录

    7月25日,奔驰母公司戴姆勒与百度签署谅解备忘录,深化双方在自动驾驶和车联网等领域的战略合作。
    的头像 发表于 07-28 09:53 2720次阅读

    嵌入式软件设计模式 好文值得收藏

    )   03)C语言和设计模式(状态模式)   04)C语言和设计模式(命令模式)   05)C语言和设计模式(解释器
    的头像 发表于 06-20 09:09 1959次阅读

    Vedanta与30家日本公司签署谅解备忘录

    印度Vedanta Group已与30家日本公司签署谅解备忘录,以开发印度半导体和玻璃显示器制造生态系统。上周在日本东京举行的2022年Vedanta-Avanstrate商业合作伙伴峰会上签署了这些备忘录,来自100多家全球公司的200多名代表出席了峰会。
    的头像 发表于 12-15 09:12 975次阅读

    设计模式行为型:备忘录模式

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式
    的头像 发表于 06-07 11:16 853次阅读
    设计<b class='flag-5'>模式</b>行为型:<b class='flag-5'>备忘录</b><b class='flag-5'>模式</b>

    新思科技同越南政府签署谅解备忘录

    在越南总理范明政访美期间,新思科技与越南国家创新中心(nic)签署了关于培养越南集成电路设计人才的谅解备忘录,支持nic成立芯片设计孵化中心。另外,新思科技与越南信息通讯部下属的信息通信威廉希尔官方网站 产业公司签订了支援越南半导体产业发展的谅解备忘录
    的头像 发表于 09-20 10:56 1553次阅读

    实践GoF的23种设计模式备忘录模式

    相对于代理模式、工厂模式等设计模式备忘录模式(Memento)在我们日常开发中出镜率并不高,除了应用场景的限制之外,另一个原因,可能是
    的头像 发表于 11-25 09:05 544次阅读
    实践GoF的23种设计<b class='flag-5'>模式</b>:<b class='flag-5'>备忘录</b><b class='flag-5'>模式</b>

    亿纬锂能与Aksa签署谅解备忘录,共建土耳其合资公司

    根据这份谅解备忘录, 亿纬锂能和Aksa同意在土耳其设立一个合资企业。至于合资企业的股权结构、管理模式、融资途径等具体内容将在未来的合资协议中予以详述。
    的头像 发表于 01-16 10:22 573次阅读

    苹果iOS 18将支持语音备忘录及数学符号显示

    首先是语音备忘录功能。据悉,苹果有意在iOS 18系统中加入此项功能,使iPhone用户能够便捷地录制音频文件,并将其直接嵌入至备忘录之中。
    的头像 发表于 04-18 11:14 521次阅读