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

简介: 该博客文章通过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());    
    }
}

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

相关文章
|
7月前
|
存储 弹性计算 Linux
阿里云服务器购买流程参考:快速、自定义、活动三种购买方式详解与流程指南
对于初次接触阿里云服务器的用户来说,选择合适的购买方式并了解详细的购买流程至关重要,阿里云提供了快速购买、自定义购买和活动购买等多种购买方式,以满足不同用户的需求。本文将为大家展示阿里云服务器的三种主要购买方式:快速购买、自定义购买以及通过活动购买,以供大家了解具体的流程,帮助用户轻松上手,快速搭建高效、稳定的云端环境。
319 10
|
Cloud Native 云计算 开发者
云原生技术实践:Docker容器化部署示例
【8月更文挑战第31天】本文通过深入浅出的方式,介绍了如何在云计算时代利用Docker容器技术实现应用的快速部署和高效管理。文章不仅解释了Docker的基本概念和优势,还提供了详细的操作步骤和代码示例,帮助初学者轻松入门。让我们一起探索云原生的世界,解锁应用部署的新姿势!
|
算法 C++
c++算法学习笔记 (5)前缀和+差分
c++算法学习笔记 (5)前缀和+差分
|
存储 搜索推荐 数据挖掘
淘宝商品详情API:挖掘实时数据金矿,点燃电商增长引擎
随着互联网的快速发展,电子商务在全球范围内得到了广泛应用。作为中国电商市场的领军者,淘宝不仅拥有庞大的用户群体和海量的商品数据,还提供了一系列的API接口,使得第三方开发者可以方便地获取并利用这些数据。其中,淘宝商品详情API是淘宝开放平台中非常重要的一项接口,它能够获取到淘宝网内商品的详细信息,从而帮助开发者更好地服务用户,提升电商业务的运营效率。 本文将详细介绍淘宝商品详情API的应用场景、使用方法和注意事项,并通过示例代码展示如何使用该API获取商品详情数据。同时,本文还将探讨如何利用这些数据实现个性化推荐、提升销售转化率等业务目标。
|
XML Java API
彻底了解|利用Apache CXF框架开发WebService
前言WebService是为了支持网络的机器间操作交互而设计用来开发分布式的交互操作的应用程序组件,通常被定义为一组模块化的API,他们可以通过网络进行调用,来执行远程系统的请求服务,而...
747 0
PointNet++:Deep Hierarchical Feature Learning on Points Sets in a Metrci Space 学习笔记
PointNet++:Deep Hierarchical Feature Learning on Points Sets in a Metrci Space 学习笔记
136 0
|
算法
【每日算法】AB9 链表
【每日算法】AB9 链表
201 1
算法学习--递归斐波那契数
算法学习--递归斐波那契数
|
XML JavaScript 前端开发
Vue3+Element Plus使用svg加载iconfont的解决方案
Element UI作为一款优秀的开源组件库,想必很多人都使用过,在Vue3中,我们需要使用Element Plus。Element Plus有很多好用的组件,详细用法可直接去查看官方文档:[Element Plus](https://element-plus.org/zh-CN/)。本文主要介绍如何在Vue3+Element Plus的项目中,使用自己封装的svg图标。
4240 0
Vue3+Element Plus使用svg加载iconfont的解决方案
|
关系型数据库 索引 存储
ORACLE大表关联更新提速方法
执行两表关联更新时,oracle一般采用类似nested_loop的更新方式。当依据关联关系将表B的值更新到A表的字段中时,先遍历A表的,对A表的每行记录查询B表的索引,得到b表的结果后再更新到A表。由于存在查询索引的操作,更新每条记录都会至少执行两次io操作。
324582 0