设计模式之备忘录模式
2017-05-05 15:23
239 查看
概述:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
角色:
Memento 备忘录存储原发器对象的内部状态
Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。 使用备忘录恢复内部状态
Caretaker 负责保存好备忘录。 不能对备忘录的内容进行操作或检查
类图:
实现:
打印:
Originator{state=’1’}
Originator{state=’2’}
Originator{state=’3’}
Originator{state=’2’}
Originator{state=’1’}
角色:
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’}
相关文章推荐
- HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零
- 十八 设计模式之备忘录模式
- 设计模式学习-Memento(备忘录)
- 设计模式学习-Memento(备忘录)
- java 设计模式 学习笔记 (14) 备忘录模式
- Java设计模式-----Memento备忘录模式
- 设计模式-----备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式Memento
- 设计模式--Memento 备忘录模式
- 设计模式之备忘录模式
- c++设计模式之备忘录模式
- 设计模式----Memento(备忘录)模式
- 设计模式----Memento(备忘录)
- 设计模式之Memento(备忘录)
- 设计模式学习笔记(二十)——Memento备忘录
- DOTA版设计模式——备忘录
- 设计模式-结构型模式-备忘录
- 《模式——工程化实现及扩展》(设计模式C# 版)《备忘录模式 Memento》——“自我检验"
- 深入浅出Java设计模式之备忘录模式