1.备忘录模式
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

备忘录模式是一种给我们的软件提供后悔药的机制,通过它可以使系统恢复到某一特定的历史状态。
备忘录模式包含如下角色: - Originator: 原发器 - Memento: 备忘录 - Caretaker: 负责人
2.实例
某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。

项目结构图如下:

设计备忘录状态类
public class MemenTo {
private String account;
private String password;
private String telNo;
public MemenTo(String account, String password, String telNo) {
super();
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;
}
public void show(){
System.out.println("account:"+this.account);
System.out.println("password:"+this.password);
System.out.println("telNo:"+this.telNo);
}
}
设计用户状态操作类
public class UserInfoDTO {
private MemenTo memen;
public UserInfoDTO(MemenTo memen){
this.memen = memen;
}
public String getAccount() {
return memen.getAccount();
}
public void setAccount(String account) {
this.memen.setAccount(account);
}
public String getPassword() {
return this.memen.getPassword();
}
public void setPassword(String password) {
this.memen.setPassword(password);
}
public String getTelNo() {
return memen.getTelNo();
}
public void setTelNo(String telNo) {
this.memen.setTelNo(telNo);
}
public MemenTo saveMemenTo(){
return new MemenTo(memen.getAccount(),memen.getPassword(), memen.getTelNo());
}
public void restoreMemenTo(MemenTo memenTo){
this.memen = memenTo;
}
public void show(){
this.memen.show();
}
}
设计负责人类
public class CareTaker {
private MemenTo memenTo;
public MemenTo getMemenTo() {
return memenTo;
}
public void setMemenTo(MemenTo memenTo) {
this.memenTo = memenTo;
}
}
测试类
public class MemenToDemo01 {
public static void main(String[] args) {
MemenTo memenTo = new MemenTo("zhangsan","123456","18991167133");
UserInfoDTO userInfoDTO=new UserInfoDTO(memenTo);
CareTaker careTaker=new CareTaker();
System.out.println("状态一....");
userInfoDTO.show();
//保存备忘录
careTaker.setMemenTo(userInfoDTO.saveMemenTo());
System.out.println("-------------");
userInfoDTO.setPassword("1111111");
userInfoDTO.setTelNo("13991837899");
System.out.println("状态二....");
userInfoDTO.show();
System.out.println("----------------");
//从备忘录中恢复
userInfoDTO.restoreMemenTo(careTaker.getMemenTo());
System.out.println("回到状态一....");
userInfoDTO.show();
System.out.println("-------------------");
}
}
运行结果:
状态一....
account:zhangsan
password:123456
telNo:18991167133
-------------
状态二....
account:zhangsan
password:1111111
telNo:13991837899
----------------
回到状态一....
account:zhangsan
password:123456
telNo:18991167133
-------------------