23种设计模式之备忘录模式(Memento Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的备忘录模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

备忘录模式概念

备忘录模式(Memento Pattern)是一种行为型设计模式。该模式允许在不暴露对象实现细节的情况下,将对象恢复到之前的状态。

备忘录模式角色

备忘录模式由三个核心角色组成:

发起人(Originator):发起人是具有要恢复状态的对象。它定义了创建备忘录对象的方法,以便在需要时使用这些备忘录来恢复对象的先前状态。

备忘录(Memento):备忘录对象是用于保存发起人对象状态的容器。它通常只存储发起人的状态信息,而不包括任何关于状态如何被捕获或恢复的实现细节。

管理者(Caretaker):管理者负责管理备忘录对象,并且只能对它们进行保存和恢复的操作。管理者可以对备忘录执行操作,但是不能查看或修改其内容。

在备忘录模式中,当发起人需要保存旧状态时,它会向管理者请求一个备忘录对象。管理者返回一个新的备忘录对象,并将当前状态保存在其中。如果在之后需要恢复状态时,发起人将这个备忘录对象还原为旧状态,这个备忘录对象将包含旧的状态信息。

备忘录模式优缺点

备忘录模式的优点是它可以让发起人对象有更好的封装性,因为它不需要暴露其实现细节;同时,备忘录对象的存储和恢复操作对发起人对象是透明的,从而减少了耦合。然而,使用备忘录模式可能会带来一些开销,尤其是在需要恢复大量状态信息时。

备忘录模式常见的应用场景包括文本编辑器的撤销操作、数据库事务回滚、游戏存档等等。

备忘录模式案例

接着通过一个案例来学习一下备忘录模式:

首先创建发起人类(Originator)

public class Originator {

    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    /**
     * 将当前状态存储到备忘录中
     */
    public Memento createMemento() {
        return new Memento(state);
    }

    /**
     * 从备忘录中恢复状态
     */
    public void restoreFromMemento(Memento memento) {
        state = memento.getState();
    }

}

接着创建备忘录类(Memento)

public class Memento {

    private final String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

}

创建负责人类(Caretaker)

public class Caretaker {

    private Memento memento;

    /**
     * 存储备忘录
     */
    public void storeMemento(Memento memento) {
        this.memento = memento;
    }

    /**
     * 获取备忘录
     */
    public Memento retrieveMemento() {
        return memento;
    }

}

然后测试代码

public class MementoPatternDemo {

    public static void main(String[] args) {
        Originator originator = new Originator(); // 创建发起人对象
        Caretaker caretaker = new Caretaker(); // 创建负责人对象

        originator.setState("State1"); // 设置状态
        caretaker.storeMemento(originator.createMemento()); // 将备忘录存储到负责人中

        originator.setState("State2"); // 改变状态

        // 从备忘录恢复当前状态
        originator.restoreFromMemento(caretaker.retrieveMemento());

        System.out.println("Current state: " + originator.getState());
    }

}

运行结果为:

Current state: State1

在上述代码中,发起人类(Originator)负责创建和存储备忘录,备忘录类(Memento)用于存储当前状态,负责人类(Caretaker)则负责管理备忘录。在测试代码中,将发起人对象的状态从“State1”改变到“State2”,然后使用负责人对象的备忘录恢复机制将状态还原回原来的“State1”。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小威要向诸佬学习呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值