您的位置:首页 > 其它

行为型设计模式-备忘录模式

2017-03-01 17:28 375 查看
备忘录模式:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态

小应用:单机游戏中,退出游戏或者游戏故障时进行备份,游戏重新启动之后则从备份还原备份数据

备忘录模式参与角色:

发起者:记录当前时刻的内部状态,负责定义备份范围,负责创建和恢复备忘录数据

备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态

管理角色:对备忘录进行管理,保存和提供备忘录

发起者:Originator

package com.zhiwei.memento;

public class Originator {

private String name;

private String content;

private String persons;

public void setName (String name) {
this.name =  name;
}
public String getName () {
return this.name;
}
public void setContent (String content) {
this.content = content;
}
public String getContent () {
return this.content;
}
public void setPersons (String persons) {
this.persons =  persons;
}
public String getPersons () {
return this.persons;
}

/**
* 备份会议记录
* @return
*/
public Memento getMemento() {
return new Memento(this);
}

/**
* 还原会议记录
* @param memento
*/
public void setMemento(Memento memento) {
this.name = memento.getName();
this.content = memento.getContent ();
this.persons = memento.getPersons ();
}
}


备忘录:Memento

package com.zhiwei.memento;

public class Memento {

private String name;

private String content;

private String persons;

public Memento(Originator originator) {
this.name = originator.getName();
this.content = originator.getContent();
this.persons = originator.getPersons();
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

public void setContent(String content) {
this.content = content;
}

public String getContent() {
return this.content;
}

public void setPersons(String persons) {
this.persons = persons;
}

public String getPersons() {
return this.persons;
}
}


管理角色:Caretaker

package com.zhiwei.memento;

public class Caretaker {

private Memento memento;

/**
* 恢复
* @return
*/
public Memento getMemento() {
return memento;
}

/**
* 备份
* @param memento
*/
public void setMemento(Memento memento) {
this.memento = memento;
}

}


测试代码:

Originator originator = new Originator();  //发起者
originator.setName("公司销售会议");
originator.setContent("有关销售价格的会议内容");
originator.setPersons("总经理、销售处长");
System.out.println("旧内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

//管理者备份数据
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.getMemento());
originator.setName("公司办公会议");
originator.setContent("有关员工稳定的会议内容");
originator.setPersons("董事长、总经理、人事副总");
System.out.println("新内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

//从管理者获取已备份的数据并恢复
originator.setMemento(caretaker.getMemento());
System.out.println("备份内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐