一、备忘录模式
1、备忘录模式
备忘录模式(Memento Pattern)是一种行为型模式。通过保存一个对象的某个状态,以便在适当的时候恢复对象。
2、实现思路
(1)、定义记录数据的格式规范。
(2)、编写实现类,实现备忘实体对象。
(3)、定义操作对象类,内置数据和备忘录集合,记录当前对象的数据,同时添加到备忘录中。
二、代码场景
1、示例场景
用户可以多次操作一个数据,每次操作后的结果会改变。通过备忘录回溯之前的操作数据。
2、代码示例
// 1、定义数据格式
public interface Memento1 {String getData();void setData(String data);
}
// 2、定义实现类,即备忘录对象
public class MementoBook implements Memento1 {String data; // 备忘录记录data数据public MementoBook(String data) {this.data = data;}@Overridepublic String getData() {return data;}@Overridepublic void setData(String data) {this.data = data;}
}
// 3、定义操作对象,记录数据,记录备忘录,封装回溯方法
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class Originator {String data; // 操作数据List<MementoBook> mementoBooks; // 备忘录集合public Originator() {mementoBooks = new ArrayList<>();}public void saveData(String data) { // 保存操作数据this.data = data;mementoBooks.add(new MementoBook(data));}public void revoke() { // 返回上一次操作的数据this.data = mementoBooks.get(mementoBooks.size() - 2).getData();mementoBooks = mementoBooks.subList(0, mementoBooks.size() - 1);}public void revokeHistory(int index) { // 返回到历史指定的数据this.data = mementoBooks.get(index - 1).getData();mementoBooks = mementoBooks.subList(0, index);}
}
// 4、测试
public static void main(String[] args) {Originator originator = new Originator();originator.saveData("1");originator.saveData("2");originator.saveData("3");originator.saveData("4");originator.saveData("5");originator.saveData("6");originator.saveData("7");originator.saveData("8");originator.saveData("9");originator.saveData("10");System.out.println("当前值:"+originator.getData());originator.revoke();System.out.println("撤回一步的值:"+originator.getData());originator.revoke();System.out.println("撤回一步的值:"+originator.getData());originator.revokeHistory(5);System.out.println("测绘到第5步当时的值:"+originator.getData());}
操作结果:
总结:备忘录,顾名思义就是怕忘记而做的笔记。主要用来做数据的回溯,方便查询过去时刻的数据。本例实现主要通过定义的一个集合,这个集合仅包含一个对象的操作接口,所以需要内置到对象的属性中。真实开发是,数据可以是任意类型的对象,保存也可以是数据库等第三方组件,但是一定要有一个原则,就是一个操作类仅能有自己的操作数据即可。
学海无涯苦作舟!!!