首页 > 其他分享 >备忘录模式

备忘录模式

时间:2024-12-30 22:43:39浏览次数:1  
标签:originator name age 模式 备忘录 userInfo public UserInfo

实验 20:备忘录模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解备忘录模式的动机,掌握该模式的结构;

2、能够利用备忘录模式解决实际问题。

 

[实验任务一]:多次撤销

改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。

实验要求:

1. 画出对应的类图;

 

2. 提交源代码;

import java.util.ArrayList;

 

// 用户信息类

class UserInfo {

    private String name;

    private int age;

 

    public UserInfo(String name, int age) {

        this.name = name;

        this.age = age;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.name = name;

        this.age = age;

    }

}

 

// 备忘录类

class UserInfoMemento {

    private UserInfo savedUserInfo;

 

    public UserInfoMemento(UserInfo userInfo) {

        this.savedUserInfo = new UserInfo(userInfo.getName(), userInfo.getAge());

    }

 

    public UserInfo getUserInfo() {

        return savedUserInfo;

    }

}

 

// 原发器类

class UserInfoOriginator {

    private UserInfo userInfo;

 

    public UserInfoOriginator(UserInfo userInfo) {

        this.userInfo = userInfo;

    }

 

    public UserInfoMemento createMemento() {

        return new UserInfoMemento(userInfo);

    }

 

    public void restoreFromMemento(UserInfoMemento memento) {

        this.userInfo = memento.getUserInfo();

    }

 

    public UserInfo getUserInfo() {

        return userInfo;

    }

}

 

// 负责人类

class UserInfoCaretaker {

    private ArrayList<UserInfoMemento> mementoList = new ArrayList<>();

 

    public void addMemento(UserInfoMemento memento) {

        mementoList.add(memento);

    }

 

    public UserInfoMemento getMemento(int index) {

        if (index >= 0 && index < mementoList.size()) {

            return mementoList.get(index);

        }

        return null;

    }

}

 

// 测试类

public class Main {

    public static void main(String[] args) {

        // 创建初始用户信息

        UserInfo initialUserInfo = new UserInfo("John", 30);

        UserInfoOriginator originator = new UserInfoOriginator(initialUserInfo);

        UserInfoCaretaker caretaker = new UserInfoCaretaker();

 

        // 第一次修改用户信息并保存备忘录

        originator.getUserInfo().setName("Jane");

        caretaker.addMemento(originator.createMemento());

 

        // 第二次修改用户信息并保存备忘录

        originator.getUserInfo().setAge(35);

        caretaker.addMemento(originator.createMemento());

 

        // 进行撤销操作,恢复到第一次修改前的状态

        originator.restoreFromMemento(caretaker.getMemento(0));

 

        System.out.println("当前用户信息:");

        System.out.println("姓名:" + originator.getUserInfo().getName());

        System.out.println("年龄:" + originator.getUserInfo().getAge());

    }

}

3. 注意编程规范。

 

 

标签:originator,name,age,模式,备忘录,userInfo,public,UserInfo
From: https://www.cnblogs.com/Christmas77/p/18642625

相关文章

  • 策略模式
    实验23:策略模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解策略模式的动机,掌握该模式的结构;2、能够利用策略模式解决实际问题。 [实验任务一]:旅行方式的选择旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可......
  • 状态模式
    实验 22:状态模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解状态模式的动机,掌握该模式的结构;2、能够利用状态模式解决实际问题。 [实验任务一]:银行账户用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账......
  • 访问者模式
    实验25:访问者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解访问者模式的动机,掌握该模式的结构;2、能够利用访问者模式法解决实际问题。 [实验任务一]:打包员在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。实验要......
  • 模板方法模式
    实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。 [实验任务一]:数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义......
  • 建造者模式
    实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起......
  • 单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图; 2. ......
  • 适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图; 2.......
  • 桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 装饰模式
    实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。 [实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而......
  • 组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1.文件的执行不需真正实现,只需简单提......