【设计模式】Java设计模式 - 备忘录模式

【设计模式】Java设计模式 - 备忘录模式

😄 不断学习才是王道
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 一个有梦有戏的人 @怒放吧德德
🌝分享学习心得,欢迎指正,大家一起学习成长!

请添加图片描述

👊今天继续卷设计模式,备忘录模式理解或者是案例写起来都比较简单

简介

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

备忘录模式原理分析

就是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
备忘录模式比较简单,这就类似于我们以前打游戏的存档,将暂时的数据保存起来,等需要加载存档的时候只需要打开加载就可以恢复到当时保存的时候。
UML原理图:
在这里插入图片描述

角色与职责

Originator:原对象,需要保存的对象。
Memento:备忘录对象,负责保存需要保存的内容。
Caretaker:守护者对象,负责保存多个备忘录对象。

备忘录实例

通过以上的uml图编写一个实例,在原始类中声明了状态,通过保存在备忘录,等状态修改后,利用备忘录来回复状态。
类图:
在这里插入图片描述

①、创建备忘录

这里就保存state数据,通过构造方法来赋值,在通过get方法获取数据。

package com.lyd.demo.memento;
/**
 * @Author: lyd
 * @Description: 备忘录对象
 * @Date: 2022-09-07
 */
public class Memento {
    private String state;
    public Memento(String state) {
        this.state = state;
    }
    public String getState() {
        return state;
    }
}

②、创建原始类

通过saveStateMemento方法实例化备忘录,并把要存储的据带过去赋值,通过getStateFromMemento方法获取数据。

package com.lyd.demo.originator;
import com.lyd.demo.memento.Memento;
/**
 * @Author: lyd
 * @Description: 原始
 * @Date: 2022-09-07
 */
public class Originator {
    private String state;
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    // 保存对象
    public Memento saveStateMemento() {
        return new Memento(state);
    }
    // 恢复备忘录
    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

③、创建守护者

守护者负责收集多个备忘录对象,提供需要恢复哪一个“存档”的数据。定义一个ArrayList链表数组,每次放入备忘录的时候调用add添加到守护者。这里可以不一定是用ArrayList,也可以是直接用HashMap<String, ArrayList>

package com.lyd.demo.save;
import com.lyd.demo.memento.Memento;
import java.util.ArrayList;
/**
 * @Author: lyd
 * @Description: 守护者,保存多个备忘录对象
 * @Date: 2022-09-07
 */
public class Caretaker {
    private ArrayList<Memento> mementoArrayList = new ArrayList<Memento>();
    public void add(Memento memento) {
        mementoArrayList.add(memento);
    }
    // 获取 - 恢复
    public Memento get(int index) {
        return mementoArrayList.get(index);
    }
}

④、测试

package com.lyd.demo.test;
import com.lyd.demo.originator.Originator;
import com.lyd.demo.save.Caretaker;
/**
 * @Author: lyd
 * @Description:
 * @Date: 2022-09-07
 */
public class MementoTest {
    public static void main(String[] args) {
        // 创建原来的状态
        Originator originator = new Originator();
        // 创建备忘录
        Caretaker caretaker = new Caretaker();
        originator.setState("状态A");
        System.out.println("当前状态:" + originator.getState());
        // 存起来
        caretaker.add(originator.saveStateMemento());
        originator.setState("状态B");
        // 存起来
        caretaker.add(originator.saveStateMemento());
        System.out.println("当前状态:" + originator.getState());
        originator.setState("状态C");
        System.out.println("当前状态:" + originator.getState());
        originator.getStateFromMemento(caretaker.get(0));
        System.out.println("恢复首次状态");
        System.out.println("当前状态:" + originator.getState());
    }
}

运行结果:
在这里插入图片描述

好,今天的分享就到这里。

👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得一键三连哦!👍

💓德德小建议:

理解设计模式不是一件简单的事情,需要不断的学习和动手去练习,才能理解。只有掌握好设计模式,才能够真正的理解SpringAOP和Mybatis的底层原理。各位读者可以和我一样,动手敲一敲代码,甚至用不同的例子来做,通过debug一步一步调试,还有就是多看看别人的例子。能够有助于理解!谢谢各位观看指点!❤️ ❤️ ❤️

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个有梦有戏的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值