软件设计备忘录模式

改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用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);
        }
}
Caretaker

 

软件设计备忘录模式
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;
    }
   
}
Memento 软件设计备忘录模式
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);        
    }
}
UserInfoDTO 软件设计备忘录模式
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("---------------------------");
    }
    }
}
Client

 

上一篇:CF313A Ilya and Bank Account 题解


下一篇:21-Spring5 使用GenericApplicationContext创建IOC容器