软件设计:实验 20:备忘录模式

实验 20:备忘录模式

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

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

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

 

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

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

实验要求:

1. 画出对应的类图;

2. 提交源代码;

3. 注意编程规范。

1.

 

2.import java.util.ArrayList;

import java.util.List;

 

// 发起人类

class Originator {

    private String state;

 

    public void setState(String state) {

        this.state = state;

    }

 

    public String getState() {

        return state;

    }

 

    // 创建备忘录

    public Memento createMemento() {

        return new Memento(state);

    }

 

    // 恢复备忘录

    public void restoreMemento(Memento memento) {

        this.state = memento.getState();

    }

}

 

// 备忘录类

class Memento {

    private String state;

 

    public Memento(String state) {

        this.state = state;

    }

 

    public String getState() {

        return state;

    }

}

 

// 负责人类

class Caretaker {

    private List<Memento> mementos = new ArrayList<>();

 

    // 添加备忘录

    public void add(Memento memento) {

        mementos.add(memento);

    }

 

    // 获取备忘录

    public Memento get(int index) {

        return mementos.get(index);

    }

 

    // 移除备忘录

    public void remove(int index) {

        mementos.remove(index);

    }

}

 

// 客户端代码

public class MementoPatternDemo {

    public static void main(String[] args) {

        Originator originator = new Originator();

        Caretaker caretaker = new Caretaker();

 

        // 第一次状态改变

        originator.setState("State 1");

        caretaker.add(originator.createMemento());

 

        // 第二次状态改变

        originator.setState("State 2");

        caretaker.add(originator.createMemento());

 

        // 第三次状态改变

        originator.setState("State 3");

        caretaker.add(originator.createMemento());

 

        // 执行撤销操作

        originator.restoreMemento(caretaker.get(1)); // 回到 State 2

        System.out.println("After first undo: " + originator.getState());

 

        originator.restoreMemento(caretaker.get(0)); // 回到 State 1

        System.out.println("After second undo: " + originator.getState());

    }

}

 

posted @   痛苦代码源  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示