文档章节

设计模式-备忘录模式

月夜筱风
 月夜筱风
发布于 2017/09/05 15:06
字数 443
阅读 12
收藏 0
点赞 0
评论 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
博文 53
码字总数 19574
作品 0
闵行
程序员
你需要了解的23种JavaScript设计模式

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

java高级架构牛人 ⋅ 06/02 ⋅ 0

设计模式Java Design Pattern-工厂方法模式FactoryMethod

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

勇敢写信 ⋅ 03/22 ⋅ 0

设计模式分类与原则

创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(...

晨猫 ⋅ 03/12 ⋅ 0

代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho ⋅ 04/09 ⋅ 0

Java经典设计模式基础

一、概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理...

Idea ⋅ 01/20 ⋅ 0

JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云 ⋅ 05/18 ⋅ 0

设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu ⋅ 2017/11/02 ⋅ 0

JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian ⋅ 05/22 ⋅ 0

[设计模式]简单工厂模式

简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。 简单工厂模式是一...

静默虚空 ⋅ 2015/06/03 ⋅ 0

系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给...

wbf961127 ⋅ 2017/11/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 34分钟前 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 51分钟前 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部