文档章节

设计模式-备忘录模式

月夜筱风
 月夜筱风
发布于 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

移除或自定义 WordPress 仪表盘欢迎面板

第一次登录 WordPress 后台仪表盘页面,默认都会显示 WordPress 的欢迎面板: 如果我们要移除这个面板,在主题的 functions.php 中添加下面的代码即可: 12 //移除 WordPress 仪表盘欢迎面...

james_laughing
21分钟前
0
0
HashMap实现原理及源码分析

HashMap实现原理及源码分析   哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,...

DemonsI
24分钟前
0
0
eggjs学习笔记

快速初始化 生成项目(要求最低的node版本8.x) npm i egg-init -gegg-init egg-example --type=simplecd egg-examplenpm i 启动项目 npm run dev 配置 环境配置会覆盖默认配置 config...

别人说我名字很长
27分钟前
1
0
Winform Timer控件时间间隔

sender as System.Timers.Timer).Interval = 23 * 60 * 60 * 1000.0;//将时间间隔改为23小时,23小时后重新发生timer_Elapsed事件。 //60000:时间间隔1分钟,300000:时间间隔5分钟,600000:...

笑丶笑
28分钟前
0
0
在win10系统下怎样快速切换任务视图

切换窗口:Alt + Tab 任务视图:Win + Tab (松开键盘界面不会消失) 切换任务视图:Win + Ctrl +左/右 创建新的虚拟桌面:Win + Ctrl + D 关闭当前虚拟桌面:Win + Ctrl + F4...

SummerGao
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部