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

发布时间 2023-11-25 19:47:22作者: 一个小虎牙

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

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

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

 
   

 


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

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

实验要求:

1.     提交源代码;

2.    package test20;
class Memento
{
    private String account;
    private String password;
    private String telNo;
    public Memento()
    {

    }
    public Memento(String account,String password,String telNo)
    {
        this.account=account;
        this.password=password;
        this.telNo=telNo;
    }
    public String getAccount()
    {
        return account;
    }

    public void setAccount(String account)
    {
        this.account=account;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password=password;
    }

    public String getTelNo()
    {
        return telNo;
    }

    public void setTelNo(String telNo)
    {
        this.telNo=telNo;
    }

}


package test20;

import java.util.ArrayList;

public class Caretaker
{
    private Memento memento;

    private ArrayList mementolist = new ArrayList();
    public Memento getMemento(int i) {
        return (Memento)mementolist.get(i);
    }
    public void setMemento(Memento memento) {
        mementolist.add(memento);
    }
}

package test20;

public class User
{
    private String account;
    private String password;
    private String telNo;

    public String getAccount()
    {
        return account;
    }

    public void setAccount(String account)
    {
        this.account=account;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password=password;
    }

    public String getTelNo()
    {
        return telNo;
    }

    public void setTelNo(String telNo)
    {
        this.telNo=telNo;
    }

    public Memento saveMemento()
    {
        return new Memento(account,password,telNo);
    }

    public void restoreMemento(Memento memento)
    {
        this.account=memento.getAccount();
        this.password=memento.getPassword();
        this.telNo=memento.getTelNo();
    }

    public void show()
    {
        System.out.println("Account:" + this.account);
        System.out.println("Password:" + this.password);
        System.out.println("TelNo:" + this.telNo);
    }
}

package test20;

public class Client
{
    public static void main(String a[])
    {
        User user=new User();
        Caretaker c=new Caretaker();
        int index=0;
        user.setAccount("20213719");
        user.setPassword("123456");
        user.setTelNo("18700001542");
        System.out.println("状态一:");

        user.show();
        c.setMemento(user.saveMemento());//保存备忘录
        System.out.println("---------------------------");
        index++;
        user.setPassword("152987");
        user.setTelNo("18833152202");
        System.out.println("状态二:");
        user.show();
        c.setMemento(user.saveMemento());//保存备忘录
        System.out.println("---------------------------");
        index++;

        user.setPassword("564872");
        user.setTelNo("15522053367");
        System.out.println("状态三:");
        user.show();

        System.out.println("---------------------------");

        for(int i=index-1;i>=0;i--)
        {
            user.restoreMemento(c.getMemento(i));//从备忘录中恢复
            System.out.println("回到状态:"+(i+1));
            user.show();
            System.out.println("---------------------------");
        }
    }
}