一.简介
备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。该模式又叫快照模式。
模式结构:
1.发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
2.备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
3.管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
二.实现
package com.vincent;
import java.util.*;
/**
* 设计模式
*
*/
public class App {
public static void main( String[] args ) throws Exception{
Originator originator = new Originator("状态#1");
Caretaker caretaker = new Caretaker();
caretaker.push(originator.createMemento());
System.out.println(originator);
originator.setState("状态#2");
caretaker.push(originator.createMemento());
System.out.println(originator);
originator.restoreByMemento(caretaker.popFirst());
System.out.println(originator);
}
}
/**
* 发起者
*/
class Originator{
private String state;
public Originator(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento createMemento(){
return new Memento(state);
}
public void restoreByMemento(Memento memento){
this.state = memento.getState();
}
@Override
public String toString() {
return "Originator{" +
"state='" + state + '\'' +
'}';
}
}
/**
* 备忘录
*/
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;
}
}
/**
* 管理者
*/
class Caretaker{
Deque<Memento> stack = new LinkedList<>();
public void push(Memento memento){
stack.addLast(memento);
}
public Memento pop(){
return stack.removeLast();
}
public Memento popFirst(){
return stack.removeFirst();
}
}
实现效果:
三.总结
1.栈可以非常方便保存用户上一步操作状态