某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。用户信息中包含账号、密码、电话

简介: 该博客文章通过Java代码示例介绍了备忘录模式(Memento Pattern)的应用,通过创建备忘录对象保存用户信息的状态,允许用户在进行错误操作后能够恢复到之前的状态。

某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。用户信息中包含账号、密码、电话

绘制UML类图
在这里插入图片描述
信息的初始化建立备忘录
备忘录的创建过程,就是通过构造函数的形式将一个类中的属性赋值给另外一个类里边的属性。实现原始数据的保存。在恢复原始数据时,通过创建另外一个类的对象,通过对象调用属性。然后赋值给这边类里的属性。

package com.zheng;

public class Originator { // 原始数据
    private String name; // 姓名
    private String pwd; // 密码
    private double num; // 电话

    //初始化客户信息
    public Originator(String name,String pwd,double num) {
        this.name=name;
        this.pwd=pwd;
        this.num=num;
    }

    //创建一个备忘录对象
    public Memento save() {
        return new Memento(this.name,this.pwd,this.num);//将原始数据的值保存在备忘录里边
    }

    //恢复状态
    public void restore(Memento memento) {
        this.name=memento.getName();//从备忘录里边取值给原始数据
        this.pwd=memento.getPwd();
        this.num=memento.getNum();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public double getNum() {
        return num;
    }

    public void setNum(double num) {
        this.num = num;
    }

}

保存客户信息

package com.zheng;

public class Memento {
    private String name; // 姓名
    private String pwd; // 密码
    private double num; // 电话

    //初始化客户信息
    public Memento(String name,String pwd,double num) {
        this.name=name;
        this.pwd=pwd;
        this.num=num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public double getNum() {
        return num;
    }

    public void setNum(double num) {
        this.num = num;
    }

}

调用备忘录里边的属性返回给保存的数据

package com.zheng;

public class MementoCaretaker {
    private Memento me;//备忘录对象

    public Memento getMemento() {
        return me;
    }
    public void setMemento(Memento me) {
        this.me=me;
    }

}

测试端

package com.zheng;

public class Client {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        MementoCaretaker mc=new MementoCaretaker();//管理者对象
        Originator cus1=new Originator("小明","12345",12345);//初始化客户1
        System.out.println("状态一:");
        display(cus1);
        mc.setMemento(cus1.save());//保存状态
        System.out.println("----------------------------------");
        System.out.println("状态二:");
        cus1.setPwd("22222");
        cus1.setNum(99999);
        display(cus1);
        System.out.println("----------------------------------");
        System.out.println("状态二回到状态一:");
        cus1.restore(mc.getMemento());//恢复状态
        display(cus1);

    }
    public static void display(Originator o) {
        System.out.println("账户:"+o.getName()+"\n密码:"+o.getPwd()+"\n电话:"+o.getNum());    
    }
}

运行截图
在这里插入图片描述

相关文章
|
存储 SQL 分布式计算
一文彻底搞懂Hive的数据存储与压缩
怎样弄清Hive的数据存储与压缩呢,以下回答告诉你。
1296 0
一文彻底搞懂Hive的数据存储与压缩
|
4月前
|
监控 安全 Java
别让技术债务拖垮你的系统!从识别、管控到清偿的完整落地手册
本文系统解析技术债务的本质、分类与管控:澄清其非“烂代码”,而是主动权衡;按Martin Fowler四象限与5大类型(代码/架构/测试/依赖/文档)精准识别;结合自动化扫描(SonarQube等)、ArchUnit架构校验与人工评审实现量化管理;提出童子军规则、测试先行重构、绞杀者模式等分层清偿策略,并强调融入全流程的长效机制。
436 3
|
5月前
|
人工智能 并行计算 监控
别再混为一谈!万字拆解内存与显存:决定你模型训练成败的硬件真相
你好,我是AI科普博主狸猫算君!本文深入浅出解析内存(RAM)与显存(VRAM)的本质区别:前者是CPU的通用办公桌,后者是GPU的专属高速实验室。重点破除“大内存=能训大模型”误区,揭示显存带宽、容量为何直接决定AI训练成败,并提供监控、排错与硬件选配实战指南。(239字)
1650 2
别再混为一谈!万字拆解内存与显存:决定你模型训练成败的硬件真相
|
8月前
|
人工智能 测试技术 Python
AI也有“智商”吗?我们到底该用什么标准来评估它?
AI也有“智商”吗?我们到底该用什么标准来评估它?
1211 8
|
8月前
|
文字识别 算法 数据可视化
2025 年度机器视觉公司有哪些:从技术实力到落地案例的全方位选型参考
在智能制造背景下,机器视觉成为提质增效关键。本文发布2025年度机器视觉公司评估,从技术、场景、服务三大维度解析领先企业方案,聚焦苏州德创测控等代表,涵盖核心技术、落地案例与产教融合,为制造企业选型提供权威参考,助力智能升级。
|
4月前
|
人工智能 程序员 BI
零基础从0到1学GEO优化第4课(上):构建所处载体(品牌)、行业的双知识库
双知识库 = 载体知识库(品牌)+ 行业知识库,是AI理解你、信任你的“素材池”。载体知识库需包含专业信息、服务内容、用户案例、反馈数据、权威背书(用E-E-A-T原则验证)。 行业知识库需包含行业资料、痛点需求、竞品案例、趋势动态(用结构化数据覆盖全貌)。落地关键:结构化呈现、数据化表达、动态更新,让AI轻松调用你的专业信息。
|
4月前
|
缓存 Linux 芯片
X86架构黎明:从0xFFFFFFF0开始的内存空间重构与寻址深潜
按下电源键,现代CPU竟“穿越”回1978年——强制以16位实模式启动,只为兼容古老BIOS。从复位向量0xFFFFFFF0寻址、A20门解锁、GDT构建,到CR0开启保护模式、四级页表启用长模式,它历经多重“降维伪装”与“升维跃迁”,最终在64位虚拟地址中唤醒操作系统。一场精密的硬件时光旅行。(239字)
382 3
|
9月前
|
人工智能 并行计算 机器人
未来人工智能如何重构”时间“?
时间是数学还是幻觉?从熵增到几何,从人类意识到AI智能,本文探讨时间的本质。线性、循环与拓扑模型揭示其多维可能;热力学箭头与认知局限引发哲学思辨;而AI的并行预测与信息压缩,或将重构时间本身。未来智能或不再线性行走,而是编织多维时间之网,重塑我们对存在的理解。(238字)
515 0
|
11月前
|
人工智能 大数据 机器人
物流卡住脖子?试试用大数据“开挂”一下!
物流卡住脖子?试试用大数据“开挂”一下!
314 0
|
7月前
|
SQL 大数据 数据挖掘
十、HQL:排序、联合与 CTE 高级查询
Hive 查询不仅能查,还能查得漂亮、高效。我们这次聚焦 HQL 中的高级技巧——从 ORDER BY 到 SORT BY、DISTRIBUTE BY 与 CLUSTER BY,带你理解排序在分布式环境中的执行逻辑;再深入讲解 UNION 与 CTE 等查询组织方式,帮你将复杂 SQL 拆解得更清晰。我还特意写了丰富示例与实战练习,适合正在提升 Hive 查询能力的你阅读、收藏和练习。
451 6