备忘录模式【行为模式】

备忘录模式

Without violating encapsulation,capture and externalize an object‘s internal state
so that the object can be restored to this state later.
在不破坏封装性的前提下,捕获一个对象的内部状态并将其外部化,这样,该对象就可以在之后恢复到该状态。
public class Memento {
    /**
     * 备忘录模式:
     * Without violating encapsulation,capture and externalize an object‘s internal state
     * so that the object can be restored to this state later.
     * 在不破坏封装性的前提下,捕获一个对象的内部状态并将其外部化,这样,该对象就可以在之后恢复到该状态。
     */
    @Test
    public void all() {
        final Boy boy = Boy.builder().state("happy").build();
        // 基于目标对象创建备忘录
        final BoyMemento create = boy.createMemento();

        // 改变对象的内部状态
        boy.changeState();
        assertEquals("unhappy", boy.getState());

        // 从备忘录中恢复对象的状态
        boy.restoreMemento(create);
        assertEquals("happy", boy.getState());
    }
}
/**
 * 1)需要捕获内部状态的对象
 */
@Data
@Builder
class Boy{
    private String state;
    public BoyMemento createMemento() {
        return BoyMemento.builder().state(state).build();
    }
    public void restoreMemento(BoyMemento memento) {
        setState(memento.getState());
    }
    public void changeState() {
        setState("unhappy");
    }
}

/**
 * 2)备忘录对象
 */
@Data
@Builder
class BoyMemento{
    private String state;
}

原文地址:https://www.cnblogs.com/zhuxudong/p/10165448.html

时间: 2024-08-09 03:45:50

备忘录模式【行为模式】的相关文章

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

设计模式-行为型模式-策略模式

策略模式 在实际工作中我用到了策略模式,但为什么要有环境角色呢? 这里我贴上英文对含义的介绍, The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 然后看看这种设计模式的组成, 一般的,策略模式

专用服务器模式&共享服务器模式

连接ORACLE服务器一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接(shared server).那么两者有啥区别和不同呢?下面我们将对这两者的区别与不同一一剖析. 专用服务器模式(dedicated server)模式 在专用服务器模式中,用户进程运行在客户端的机器上,专用服务器进程运行在数据库服务器,用户进程和专用服务器进程是两种不同类型的进程. 对于专用服务器模式,在用户登录时,ORACLE总会创建一个新的服务进程,这通常称为专用服务器配置.这个服务器

Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式. 这里为何不是新开线程的原因请参看这篇文章:Android Runnable 运行在那个线程 这里的代码其实是在UI 主线程中下载图片的,而不是新开线程. 我们运行下面代码时,会发现他其实是阻塞了整个界面

Java设计模式(五)外观模式 桥梁模式

(九)外观模式 外观模式为子系统提供一个接口,便于使用.解决了类与类之间关系的,外观模式将类之间的关系放在一个 Facade 类中,降低了类类之间的耦合度,该模式不涉及接口. class CPU { public void startup(){ System.out.println("cpu start"); } public void shutdown(){ System.out.println("cpu stop"); } } class Memory { pu

CentOS 7 单用户模式+救援模式

CentOS 7 单用户模式+救援模式.有时候大家可能会忘记自己的root密码,或者错误(命令输入错误,命令位置输入有误等)编辑了一个/etc目录下的核心文件导致系统不能正常启动了!怎么办?重新安装系统那是实在没有办法之举!那我们就进入如下两种方式把错误的配置文件改过来,重启系统不就好了吗!接下来咱们就学习一下两种模式恢复系统Lunix单用户模式+救援模式 单用户模式+救援模式类似windows的安全模式 使用虚拟机在系统里面输入指令重启系统是不能达到我们的要求的,也就是说IDC机房可不是想进就

命令模式 & 策略模式 & 模板方法

一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如:一个推送服务类,推送的方式,可以分为:QQ推送.邮箱推送.App推送.PC插件推送. 这里讲两个点: 1.推送方式可以互相替换: 2.这些推送方式只是单纯的属于推送服务这个类本身. 好好琢磨关键词:相互替换 二.命令模式 命令模式:解决“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题. GoF&l

delphi 11 编辑模式 浏览模式

编辑模式 浏览模式 设置焦点 //在使用前需要Webbrowser已经浏览过一个网页 否则错误 uses MSHTML; ///获取Webbrowser编辑模式里面的内容 procedure EditMode();begin  (Form1.WebBrowser1.Document as IHTMLDocument2).designMode := 'on';end;//----------------------------------------------------------------

管道和过滤器模式----POSA模式助记格式

名称:管道和过滤器(Pipes and Filters) 问题: 处理数据流 1.步骤可替换 2.步骤比组件更易于重用 3.不相连的步骤不共享信息 4.存在不同的输入数据源 5.可以以多种方式给出或存放输出结果 6.中间结果需要落地,以确保处理的正确性 7.暂不取消多重步骤(并发) 方案: 管道和过滤器模式----POSA模式助记格式,布布扣,bubuko.com

Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..

Atitit.mysql  oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server.. 1. with ... as (...) 在mysql中应该如何表示 1 2. 子查询和查询嵌套主要是便于可读性提升上, 2 3. MYSQL中的解决之道::临时表. 2 4. Seo黑头关键字替换链接的统计样品 2 4.1. //---------查询com网站的数量 2 4.2. //----------------------查询net网站的