备忘录模式---多次撤销
今天做了备忘录模式---多次撤销的实验,用了差不多两个小时的时间,理解了备忘录模式的原理,下面是备忘录模式的简介以及实验要求和实现。
多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
代码部分:
package 实验20备忘录模式;
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 实验20备忘录模式;
public class Client
{
public static void main(String a[])
{
UserInfoDTO user=new UserInfoDTO();
Caretaker c=new Caretaker();
int index=0;
user.setAccount("zhangsan");
user.setPassword("123456");
user.setTelNo("13000000000");
System.out.println("状态一:");
user.show();
c.setMemento(user.saveMemento());//保存备忘录
System.out.println("---------------------------");
index++;
user.setPassword("111111");
user.setTelNo("13100001111");
System.out.println("状态二:");
user.show();
c.setMemento(user.saveMemento());//保存备忘录
System.out.println("---------------------------");
index++;
user.setPassword("555555");
user.setTelNo("13100005555");
System.out.println("状态三:");
user.show();
System.out.println("---------------------------");
for(int i=index-1;i>=0;i--)
{
int j=i+1;
user.restoreMemento(c.getMemento(i));//从备忘录中恢复
System.out.println("回到状态:"+j);
user.show();
System.out.println("---------------------------");
}
}
}
package 实验20备忘录模式;
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 实验20备忘录模式;
public class UserInfoDTO
{
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);
}
}