备忘录模式
适用场景:适用于需要维护或记录属性历史的类,或者需要保存的属性只是众多属性的一部分。
怎么使用备忘录模式?
一共需要三种类:一部分类是信息类,一部分类是备份信息类,一部分是管理信息类。
下面通过一个例子来使用备忘录模式
首先是信息类,信息类中内置备份信息类,为了起示范作用,这里展示一个类的情况。备份信息类备份信息是自定义,可备份信息类的全部属性,也可备份部分属性。
/**
* @author 州牧
* @description 内置一个Memento对象备份此时的状态
* @since 2022-03-23 20:28
*/
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento getMemento(){
return new Memento(state);
}
public void backMemento(Memento memento){
state = memento.getState();
}
@Override
public String toString() {
return "Originator{" +
"state='" + state + '\'' +
'}';
}
}
再者是备份信息类
/**
* @author 州牧
* @description 负责储存Originator对象的内部状态
* @since 2022-03-23 20:28
*/
public class Memento {
private String state;
public Memento(){}
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
最后是管理备份信息类,这部分是为了方便管理
/**
* @author 州牧
* @description 管理memento
* @since 2022-03-23 20:32
*/
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
效果如下:
/**
* @author 州牧
* @description
* @since 2022-03-23 20:33
*/
public class Client {
public static void main(String[] args) {
Originator o = new Originator();
o.setState("状态一");
System.out.println("当前状态:"+o);
Caretaker c = new Caretaker();
c.setMemento(o.getMemento());
o.setState("状态二");
System.out.println("当前状态:"+o);
o.backMemento(c.getMemento());
System.out.println("当前状态:"+o);
}
}
/*
当前状态:Originator{state='状态一'}
当前状态:Originator{state='状态二'}
当前状态:Originator{state='状态一'}
*/
最后,备忘录的使用是通过增大内存的使用,这消耗了一定的资源。