您的位置:首页 > 其它

设计模式之备忘录模式

2017-05-05 15:23 239 查看
概述:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

角色:

Memento 备忘录存储原发器对象的内部状态

Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。 使用备忘录恢复内部状态

Caretaker 负责保存好备忘录。 不能对备忘录的内容进行操作或检查

类图:



实现:

public class Originator {
private String state;

public Originator(String state) {
this.state = state;
}

//保存
public Memento createMemento() {
return new Memento(state);
}

//返回
public void history(Memento memento) {
state = memento.getState();
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

@Override
public String toString() {
System.out.println("Originator{" +
"state='" + state + '\'' +
'}');

return "Originator{" +
"state='" + state + '\'' +
'}';
}
}


public class Memento {
private String state;

public Memento(String state) {
this.state = state;
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}
}


public class Caretaker {

private ArrayList<Memento> mementoList ;

public Memento getMemento(int i){
if(null!=mementoList){
return mementoList.get(i);
}
return null;
}

public void setMemento(Memento memento){
if(null == mementoList){
mementoList = new ArrayList<>();
}
mementoList.add(memento);
}
}


public class testMemento {
//步数标志
private static int index = 0;
public static void main(String[] args) {
Caretaker caretaker = new Caretaker();
Originator originator = new Originator("1");
originator.toString();
caretaker.setMemento(originator.createMemento());
//每次备份,index+1
index++;
originator.setState("2");
originator.toString();
caretaker.setMemento(originator.createMemento());
index++;
originator.setState("3");
originator.toString();
originator.history(caretaker.getMemento(index-1));
//每次撤销,index-1
index--;
originator.toString();
originator.history(caretaker.getMemento(index-1));
index--;
originator.toString();
}
}


打印:

Originator{state=’1’}

Originator{state=’2’}

Originator{state=’3’}

Originator{state=’2’}

Originator{state=’1’}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式