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

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

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

相关文章
|
4月前
|
数据安全/隐私保护
用户及组管理操作
用户及组管理操作
42 0
jira学习案例24-用useAuth切换登录与非登录状态
jira学习案例24-用useAuth切换登录与非登录状态
126 0
jira学习案例24-用useAuth切换登录与非登录状态
|
存储 缓存 NoSQL
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 上
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 上
132 0
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能   上
|
存储 NoSQL Java
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 下
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 下
153 0
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能   下
|
缓存 NoSQL Java
用户重复登录|学习笔记
快速学习用户重复登录
218 0
用户重复登录|学习笔记
LXJ
|
数据安全/隐私保护
服务器用户、密码变动检测脚本
服务器上如果有用户变动,或者密码变动会有邮件通知。
LXJ
140 0
|
数据安全/隐私保护
需求: 需要完成如下基本功能: 1:添加用户 (注册) 2:删除用户 (注销用户) 3:修改用户 4:查询单个用户 5:查询所有用户 6:退出系统 程序运行后,
需求: 需要完成如下基本功能: 1:添加用户 (注册) 2:删除用户 (注销用户) 3:修改用户 4:查询单个用户 5:查询所有用户 6:退出系统 程序运行后,除