备忘录模式(Memonto Pattern)
在不被破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
优点:实现新的封装和提供了状态恢复的实现机制
缺点:资源消耗过大
模式结构:
1.Originator(原发器)
保存内部状态的类称为原发器。原发器可以创建一个备忘录,并存储它的当前状态,也可以使用备忘录来恢复其内部状态。
2.Memonto(备忘录)
备忘录对象不能直接被其他类使用,根据原发器来决定保存哪些内部状态。
3.Caretaker(负责人)
负责人又称管理者,它负责保存备忘录,但不能对备忘录的内容进行检查或者操作。它可以保存一个或者多个备忘录对象。
例子 恢复用户信息
1.原发器 UserInfoOriginator
package memento_22_1;
/**
* 用户信息类(原发器)
*/
public class UserInfoOriginator
{
//用户名
private String username;
//密码
private String password;
//电话号码
private String phoneNumber;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPhoneNumber()
{
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber)
{
this.phoneNumber = phoneNumber;
}
/**
* 保存备忘录
* @return 返回一个新的备忘录对象
*/
public Memento saveMemento()
{
return new Memento(username, password, phoneNumber);
}
/**
* 恢复备忘录对象
* @param memento
*/
public void restoreMemento(Memento memento)
{
this.username = memento.getUsername();
this.password = memento.getPassword();
this.phoneNumber = memento.getPhoneNumber();
}
/**
* 显示用户信息
*/
public void show()
{
System.out.println("username:" + username);
System.out.println("password:" + password);
System.out.println("phoneNumber:" + phoneNumber);
}
}
2.备忘录
package memento_22_1;
/**
* 备忘录
*/
public class Memento
{
//用户名
private String username;
//密码
private String password;
//电话号码
private String phoneNumber;
public Memento()
{
}
public Memento(String username, String password, String phoneNumber)
{
this.username = username;
this.password = password;
this.phoneNumber = phoneNumber;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPhoneNumber()
{
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber)
{
this.phoneNumber = phoneNumber;
}
}
3.负责人
package memento_22_1;
/**
* 负责人
*/
public class Caretaker
{
private Memento memento;
public Memento getMemento()
{
return memento;
}
public void setMemento(Memento memento)
{
this.memento = memento;
}
}
4.测试类(初始状态--->修改状态--->恢复状态)
package memento_22_1;
/**
* 测试类
*/
public class Test
{
public static void main(String[] args)
{
//创建原发器
UserInfoOriginator originator = new UserInfoOriginator();
//创建负责人
Caretaker taker = new Caretaker();
originator.setUsername("张三");
originator.setPassword("123456");
originator.setPhoneNumber("13800138000");
show(originator, "初始状态");
//保存状态
taker.setMemento(originator.saveMemento());
//修改密码和电话号码
originator.setPassword("654321");
originator.setPhoneNumber("1323270755x");
show(originator, "修改状态");
//恢复状态一
originator.restoreMemento(taker.getMemento());
show(originator, "恢复到初始状态");
}
private static void show(UserInfoOriginator originator,String status)
{
System.out.println(status + ":");
originator.show();
System.out.println("-----------------------");
}
}
运行结果
代码: http://114.215.186.20/14551100130/designPattern/memento_22_1.rar
点击查看更多内容
3人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦