Android开发备忘录模式(java)

释放双眼,带上耳机,听听看~!

备忘录模式定义:

在不破坏内部封装性的前提下,某个对象的内部状态的拷贝,这样在以后就可以将对象恢复到以前的状态。

备忘录模式的优点:

1.给用户提供了一种可以恢复状态的机制。

2.实现了信息的封装,用户不需要关心内部的状态的保存细节。

备忘录模式的缺点:

1.如果类的成员变多,每个都需要保存一次,消耗内存。

备忘录模式的角色:

1.原发器角色:创建一个备忘录对象,用备忘录存储它内部的状态。

2.负责人角色:它含有备忘录角色,负责保护备忘录角色。

3.备忘录角色:将原发器角色的内部状态存储起来,它需要保存哪些状态,由原发器决定。

备忘录模式的使用场景:

1.有需要保存/恢复数据的相关场景

2.需要提供一个可回滚的操作。

下面以看到过的段子为例,写备忘录模式。

/**
*源发器角色
* Created by  Administrator
*/
public class Star {
private String name;
private String sex;
private String say;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSay() {
return say;
}
public void setSay(String say) {
this.say = say;
}
//创建一个备忘录
public StarMemento memento(){
return new StarMemento(Star.this);
}
//通过备忘录对象来恢复自己的状态
public void recovery(StarMemento starMemento){
this.name=starMemento.getName();
this.sex=starMemento.getSex();
this.say=starMemento.getSay();
}
}
/**
*备忘录角色
* Created by  Administrator
*/
public class StarMemento {
private String name;
private String sex;
private String say;
//保存原发器角色状态
public StarMemento(Star star) {
this.name=star.getName();
this.sex=star.getSex();
this.say=star.getSay();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSay() {
return say;
}
public void setSay(String say) {
this.say = say;
}
}
/**
*管理者角色
* Created by  Administrator
*/
public class Controller {
//持有备忘录角色的引用,封装了备忘录角色
private  StarMemento starMemento;
public StarMemento getStarMemento() {
return starMemento;
}
public void setStarMemento(StarMemento starMemento) {
this.starMemento = starMemento;
}
}
//客户端调用
Controller controller=new Controller();
Star star=new Star();
//原发器的基本状态
star.setName("鹿晗");
star.setSex("男");
star.setSay("天啊,我的手指割破了,我要去医院");
//进行数据备份
controller.setStarMemento(star.memento());
Log.d("StarMemento","正常情况信息:"+star.getName()+"    "+star.getSex()+"    "+star.getSay());
//在医院,医生看了看长相,然后记录信息
star.setSex("女");
Log.d("StarMemento","误操作情况信息:"+star.getName()+"    "+star.getSex()+"    "+star.getSay());
//有人告诉医生,鹿晗是男的,医生进行数据恢复
star.recovery(controller.getStarMemento());
Log.d("StarMemento","正常情况信息:"+star.getName()+"    "+star.getSex()+"    "+star.getSay());
//最后医生来了句:
Log.d("StarMemento","医生说:你要是再来晚点,伤口就。。。。就。。。。就好了");

结果:

人已赞赏
Android文章

Android开发状态模式(java)

2021-2-1 16:24:52

Android文章

android开发接入萤石视频案例

2021-2-1 17:07:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索