文档章节

设计模式-备忘录模式

月夜筱风
 月夜筱风
发布于 2017/09/05 15:06
字数 443
阅读 13
收藏 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
闵行
程序员
私信 提问
设计模式 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
设计模式Java Design Pattern-工厂方法模式FactoryMethod

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

勇敢写信
03/22
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0
设计模式(Swift) - 3.观察者模式、建造者模式

上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制了类的实例化,一个类只能实例化一个对象,所有对单例对象的引用都是指向了同一个对象....

Dariel
07/01
0
0
(目录)设计模式(可复用面向对象软件的基础)

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

chapin
2015/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

react-native-storage(数据存储)文档介绍

中文doc:仅供参考 import Storage from 'react-native-storage'; import {AsyncStorage} from 'react-native'; var storage = new Storage({ // 最大容量,默认值1000条数据循环存储 ......

凌宇之蓝
16分钟前
2
0
jQuery 事件 - delegate() 方法

当点击鼠标时,隐藏或显示 p 元素: $("div").delegate("button","click",function(){ $("p").slideToggle();}); 定义和用法 delegate() 方法为指定的元素(属于被选元素的子元素)添加...

architect刘源源
25分钟前
1
0
java集合--Queue用法【转】

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的 端称为队头。队列中没有元素时,称为空队...

中国扛把子
28分钟前
2
0
区块链教程汇总

区块链的重要性已经毋庸置疑,但对大多数跃跃欲试的开发者而言,去中心化思想、非对称加密、共识算法等技术点的理解和运用,都是入门区块链开发的挑战。合适的区块链开发教程可以极大地缩短区...

geek12345
28分钟前
2
0
js操作时间

获取当前时间 function getSystemDate(){ var systemDate = new Date(); // 获取当年 var year = systemDate.getFullYear(); // 获取当月 (月+1是因为js中......

简心
36分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部