备忘录模式

概述

在软件使用过程中难免会出现一些误操作,如不小心删除了某些文字或图片,数据填入错误等,对于这些误操作,需要提供一种后悔机制,让系统可以回到误操作前的状态。备忘录模式提供了一种对象状态的撤销实现机制,当系统中某一对象需要恢复到某一历史状态时可以使用备忘录模式来进行设计


模式实例

某系统提供了用户信息操作模块,用户可以修改自己的各项信息,用户在进行了错误操作后可以恢复到操作之前的状态。

UserInfoDTO(用户信息类)

package dp.memento;

public class UserInfoDTO {

   private String account;
   private String password;

   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 Memento saveMemento() {
       return new Memento(account, password);
   }
	
   //	根据备忘录对象恢复状态
   public void restoreMemento(Memento memento) {
       this.account = memento.getAccount();
       this.password = memento.getPassword();
   }

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

备忘录 Memento

package dp.memento;

class Memento {

   private String account;
   private String password;

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

   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;
   }
}

测试类 Client

import dp.memento.UserInfoDTO;
import dp.memento.Caretaker;

public class Client {

   public static void main(String[] args) {

       UserInfoDTO user = new UserInfoDTO();

       user.setAccount("zhangsan");
       user.setPassword("123456");
       System.out.println("状态一");
       user.show();
       
		// 保存备忘录
       user.saveMemento();
       System.out.println("------------------------");

       Memento memento = user.setPassword("11111111");
       System.out.println("状态二");
       user.show();
       System.out.println("------------------------");

       // 从备忘录中恢复
       user.restoreMemento(memento);
       System.out.println("回到状态一");
       user.show();
       System.out.println("------------------------");
   }
}
posted @ 2020-05-28 11:39  低吟不作语  阅读(545)  评论(0编辑  收藏  举报