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());
    }

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

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

学海无涯苦作舟!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值