备忘录模式

实验 20:备忘录模式

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

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

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

 

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

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

实验要求:

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. 注意编程规范。

 

 

posted @ 2024-12-30 22:33  chrisrmas、  阅读(10)  评论(0)    收藏  举报