• Java设计模式 _行为型模式_备忘录模式


    一、备忘录模式

    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;
        }
        @Override
        public String getData() {
            return data;
        }
        @Override
        public 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());
        }
    

    操作结果:
    在这里插入图片描述

    总结:备忘录,顾名思义就是怕忘记而做的笔记。主要用来做数据的回溯,方便查询过去时刻的数据。本例实现主要通过定义的一个集合,这个集合仅包含一个对象的操作接口,所以需要内置到对象的属性中。真实开发是,数据可以是任意类型的对象,保存也可以是数据库等第三方组件,但是一定要有一个原则,就是一个操作类仅能有自己的操作数据即可。

    学海无涯苦作舟!!!

  • 相关阅读:
    kotlin实践笔记
    qt treeview 删除节点
    JAVA SPI
    CRM能为企业带来哪些管理提升
    网上复制代码的坑
    亚马逊云科技创新加速周:以数智化手段加速中国企业出海之旅
    实例060:字符串长度
    2-Java进阶知识总结-7-UDP-TCP
    Redis第一篇之基础入门,可以快速上手进行一些基础的操作
    Leetcode—547.省份数量【中等】
  • 原文地址:https://blog.csdn.net/qq_34207422/article/details/139295587