首页 > 其他分享 >初识设计模式 - 备忘录模式

初识设计模式 - 备忘录模式

时间:2022-11-04 09:11:50浏览次数:66  
标签:状态 return 备忘录 state 初识 设计模式 public Memento

简介

备忘录设计模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于实现防丢失、撤销、恢复等功能。

其定义是,在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象先前的状态。

典型实现

首先,定义一个备忘录 Memento 类存储状态,其代码示例如下:

public class Memento {
    private String state;

    public Memento(Originator o) {
        this.state = o.getState();
    }

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

    public String getState() {
        return this.state;
    }
}

然后,把需要被存储状态的对象称作为发起者,定义为 Originator 类,包含用于存储成员数据的属性,其代码示例如下:

public class Originator {
    private String state;

    public Originator() {}

    // 创建一个备忘录对象
    public Memento createMemento() {
        return new Memento(this);
    }

    // 根据备忘录状态恢复原发器状态
    public void restoreMemento(Memento m) {
        state = m.getState();
    }

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

    public String getState() {
        return this.state;
    }
}

定义一个负责人 Caretaker 用于管理备忘录对象,其代码示例如下:

public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return this.memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

总结

优点

备忘录模式的主要优点如下:

  • 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态
  • 实现了内部状态的封装,使得用户不需要关心状态的保存细节

缺点

备忘录模式的主要缺点如下:

  • 如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源

适用场景

备忘录模式的适用场景如下:

  • 保存一个对象在某一时刻的全部状态或部分状态,方便后续实现恢复和撤销
  • 防止外界对象破坏一个对象历史状态的封装性,避免将对象历史状态的实现细节暴露给外界对象

源码

在 JDK 中 java.util.Date 通过自身内部的一个 Long 值来实现备忘录模式。

如下是源码部分:

public class Date implements java.io.Serializable, Cloneable, Comparable<Date> {
    private transient long fastTime;

    public Date(long date) {
        fastTime = date;
    }

    public long getTime() {
        return getTimeImpl();
    }

    private final long getTimeImpl() {
        if (cdate != null && !cdate.isNormalized()) {
            normalize();
        }
        return fastTime;
    }
}

标签:状态,return,备忘录,state,初识,设计模式,public,Memento
From: https://www.cnblogs.com/fatedeity/p/16856567.html

相关文章

  • 设计模式:责任链模式的应用场景及源码应用
    一、概述责任链模式(ChainofResponsibilityPattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首......
  • 浅谈PHP设计模式的适配器模式
    简介:适配器模式属于结构型设计模式。将一个类的接口转换成可应用的兼容接口。适配器使原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式有两种实现方......
  • [Alluxio基础]-- 初识 Alluxio(原名 Tachyon )
    1、前言我们有了解分布式文件系统(HDFS)、分布式计算(如Spark),但是肯定有许多小伙伴未曾了解过Alluxio,当然我也未曾深入了解,那么,今天,我们就一起初步了解下Alluxio。它是什么......
  • 【设计模式】适配器模式
    适配器模式的意图将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作(就是把接口不兼容的问题抹平,但不......
  • 设计模式之结构型模式
    目录一、适配器模式二、装饰器模式三、代理模式四、外观模式五、享元模式六、桥接模式七、组合模式创建型模式(5个)工厂方法模式、抽象工厂模式、单例模式、建造者模式、原......
  • 设计模式之代理,手动实现动态代理,揭秘原理实现
    开心一刻周末,带着老婆儿子一起逛公园。儿子一个人跑在前面,吧唧一下不小心摔了一跤,脑袋瓜子摔了个包,稀里哗啦的哭道:“爸爸,我会不会摔成傻子!”我指了指我头上的伤痕安......
  • 设计模式十三(数据访问对象模式,前端控制器模式)
    数据访问对象模式(DataAccessObjectPattern)或DAO模式用于把低级的数据访问API或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。数据访问对象......
  • 设计模式之代理模式
    概述代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看......
  • 1-设计模式介绍
    1,设计模式概述1.1软件设计模式的产生背景"设计模式"最初被用于建筑领域的设计中。1977年美国著名建筑大师`克里斯托夫·亚历山大在他的著作《建筑模式语言:城镇、建筑、......
  • 设计模式---策略模式
    简述预先定义有着不同执行过程但结果相同的算法族,运行时指定所需算法。算法族此处为一组有共同主题的有相同结果的不同算法的集合。话不多说,看个优化案例。优化案例......