文档章节

设计模式-备忘录模式

月夜筱风
 月夜筱风
发布于 2017/09/05 15:06
字数 443
阅读 12
收藏 0

一,定义

输入图片说明

二,代码

  1. 目录

输入图片说明

  1. 具体代码
package com.boot.lijunhao.beiwanglu;

/**
 * 为了把备忘录的内容给剥离出来单独存储在这里
 * Created by lijunhao on 2017/9/5.
 */
public class StateCaretaker {

    private StateMemento stateMemento;

    public StateCaretaker(StateMemento stateMemento) {
        this.stateMemento = stateMemento;
    }

    public StateMemento getStateMemento() {
        return stateMemento;
    }

    public void setStateMemento(StateMemento stateMemento) {
        this.stateMemento = stateMemento;
    }
}

package com.boot.lijunhao.beiwanglu;

/**
 *
 * 所要备忘的内容(少于或等于要备忘的类的属性)
 * Created by lijunhao on 2017/9/5.
 */
public class StateMemento {

    private String state;

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

    public String getState() {
        return state;
    }

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

package com.boot.lijunhao.beiwanglu;

import lombok.extern.slf4j.Slf4j;

/**
 * 所要备忘的类(在这里能创建备忘录,并从备忘录中恢复)
 * Created by lijunhao on 2017/9/5.
 */
@Slf4j
public class StateOriginator {

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        log.info("setState在类(StateOriginator.java:19)行:{}","状态为"+state);
    }

    public StateMemento createMemento(){
        //创建一个备忘录
        return new StateMemento(state);
    }

    public void recoverMemento(StateMemento stateMemento){
        //从备忘录里恢复属性值
        state=stateMemento.getState();
    }
}

package com.boot.lijunhao.beiwanglu;

import lombok.extern.slf4j.Slf4j;

/**
 *
 * 备忘录模式有几个名词:
 *      Originator :发起人
 *      Memento :备忘录
 *      Caretaker :管理者
 *
 *      在逻辑运算时,遇到:判断处理逻辑后发现不对,又要回到原状态的情况
 * Created by lijunhao on 2017/9/5.
 */
@Slf4j
public class Start {

    public static void main(String[] args) {
        StateOriginator stateOriginator = new StateOriginator();
        stateOriginator.setState("第一个状态");
        //开始创建备忘录
        StateMemento memento = stateOriginator.createMemento();
        //这个类是为了把StateMemento从StateOriginator中剥离出来(可以弄成全局变量)
        StateCaretaker stateCaretaker = new StateCaretaker(memento);
        //再次改变属性
        stateOriginator.setState("第二个状态");
        //恢复备忘录
        stateOriginator.recoverMemento(stateCaretaker.getStateMemento());
        log.info("main在类(Start.java:26)行:{}","恢复后的状态为:"+stateOriginator.getState());
    }
}

  1. 结果
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.StateOriginator - setState在类(StateOriginator.java:19)行:状态为第一个状态
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.StateOriginator - setState在类(StateOriginator.java:19)行:状态为第二个状态
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.Start - main在类(Start.java:26)行:恢复后的状态为:第一个状态

© 著作权归作者所有

共有 人打赏支持
月夜筱风
粉丝 0
博文 55
码字总数 19574
作品 0
闵行
程序员
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人
06/02
0
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之声明合并(二)

转发 TypeScript基础入门之声明合并(二) 声明合并 合并命名空间 与接口类似,同名的命名空间也将合并其成员。 由于名称空间同时创建了名称空间和值,因此我们需要了解它们是如何合并的。 要合...

durban
9分钟前
0
0
centos7系统安装sersync+rsync实现服务器同步功能

centos7系统安装sersync+rsync实现服务器同步功能 MQ_douer0人评论21708人阅读2017-04-08 15:49:03 一、为什么要用sersync+rsync架构? 1、sersync是基于inotify开发的,类似于inotify-tools...

linjin200
10分钟前
1
0
Windows下安装phpRedis扩展

Windows下安装phpRedis扩展 通常在做PHP程序测试时,会用到Redis。而一般测试都是在Windows下进行的,所以需要在Windows环境下安装phpRedis扩展,用以支持php对Redis的访问。 工具/原料 php调...

梦梦阁
15分钟前
1
0
HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法

HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法 在做双十一压测时,高并发调用requests时报错.问题解决方法 问题原因 是因为在每次数据传输前客户端要和服务器建立TCP...

_Change_
19分钟前
0
0
iosdfgh

复制 IO流 (***** 了解 *****) 1.1 概述 之前我们学习了 File 类,这个类中有很多操作文件本身的方法, File类它只能操作文件或文件夹,并不能去访问文件中的数据。真正保存数据的是文件,数据...

码农屌丝
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部