Java备忘录(Memento)模式实现的示例代码

/**

* 数据对象

* @author stone

*

*/

public class DataState {

private String action;

public void setAction(String action) {

this.action = action;

}

public String getAction() {

return action;

}

}/**

* 一个保存另外一个对象内部状态拷贝 的对象.这样以后就可以将该对象恢复到原先保存的状态.

*

* @author stone

*

*/

import java.io.File;

import java.io.Serializable;

public class Memento implements Serializable {

/*private int number;

private File file = null;

public Memento(Originator o) {

this.number = o.getNumber();

this.file = o.getFile();

}

public int getNumber() {

return this.number;

}

public void setNumber(int number) {

this.number = number;

}

public File getFile() {

return this.file;

}

public void setFile(File file) {

this.file = file;

}

*/

private DataState state;

public Memento(Originator o) {

this.state = o.getState();

}

public DataState getState() {

return state;

}

public void setState(DataState state) {

this.state = state;

}

}public class Originator {

/*private int number;

private File file = null;

public Originator() {

}

// 创建一个Memento,将自身作为参数传入

public Memento getMemento() {

return new Memento(this);

}

// 从Memento中取出保存的数据,恢复为原始状态

public void setMemento(Memento m) {

number = m.getNumber();

file = m.getFile();

}

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

public File getFile() {

return file;

}

public void setFile(File file) {

this.file = file;

}*/

private DataState state;

public Originator() {

}

public Originator(DataState state) {

this.state = state;

}

// 创建一个Memento,将自身作为参数传入

public Memento getMemento() {

return new Memento(this);

}

// 从Memento中取出保存的数据,恢复为原始状态

public void setMemento(Memento m) {

/*

* getMemento() 创建的对象,保存在某个容器里,

* 当需要恢复时,将其传入当前方法, 再使用getState(),得出

*/

this.state = m.getState();

}

public DataState getState() {

return state;

}

public void setState(DataState state) {

this.state = state;

}

}/*

* 备忘录(Memento)模式 行为型模式

* 流程: Memento用于保存 数据状态,

* Originator用于 加载数据, 建立Memento对象,及通过Memento恢复原始数据

*/

public class Test {

public static void main(String[] args) {

//Originator originator = new Originator();

//originator.setNumber(8);

//

//Memento memento = originator.getMemento();

//System.out.println(memento.getNumber());

DataState state = new DataState();

state.setAction("copy a character");

Originator originator = new Originator();

System.out.println("创建原始数据");

originator.setState(state);

System.out.println("创建备忘录对象, 保存原始数据状态");

Memento memento = originator.getMemento();

System.out.println("创建了一个新数据");

originator.setState(new DataState());

System.out.println("创建新数据后:" + originator.getState().getAction());

/*

* memento 需要保存在某地,需要时取出,以恢复它内部所保存的数据

*/

System.out.println("创建新数据后,恢复原数据");

originator.setMemento(memento);

System.out.println(originator.getState().getAction());

}

}

打印创建原始数据

创建备忘录对象, 保存原始数据状态

创建了一个新数据

创建新数据后:null

创建新数据后,恢复原数据

copy a character

java memento_Java备忘录(Memento)模式实现的示例代码相关推荐

  1. 用Java做手机备忘录_Java 实现备忘录(Memento)模式

    /** * 数据对象 * @author stone * */ public class DataState { private String action; public void setActio ...

  2. 设计模式学习笔记——备忘录(Memento)模式

    设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...

  3. 设计模式--备忘录(Memento)模式

    模式定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态 类图 要点总结 备忘录(Memento)存储原发器(Originato ...

  4. JAVA 23种开发模式详解(代码举例)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  5. 计算机毕业设计中JAVA 23种开发模式详解(代码举例)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式

    在大部分游戏中,都有一个"存档点"的概念.比如,在挑战boss前,游戏会在某个地方存档,假设玩家挑战boss失败,则会从这个存档点開始又一次游戏.因此,我们能够将这个"存 ...

  7. 策略模式思想及示例代码(Strategy)

    策略模式: 策略模式是:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. Spring 中在实例化对象的时候用到 Strategy 模式,在 S ...

  8. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  9. java 时间api源码,时间API(示例代码)

    1. 时间API 我们的时间在java里是long类型的整数,这个整数称之为时间戳(也叫格林威治时间),即从1970-01-01到现在为止所经过的毫秒数,单有这个时间戳是不能准确表达世界各地的时间,还 ...

最新文章

  1. OKR目标管理法不会用?看最新客户服务团队OKR模板
  2. 手机main.html文件,tab-main.html
  3. 我的Go语言学习之旅四:各种变量的声明
  4. 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退栈 Intent FLAG...
  5. #includeunistd.h存在linux中,含有系统服务的函数
  6. Vue与服务端数据交互 [ axios ]
  7. IOS UI 第三篇:基本UI
  8. spring事务管理的一些注意点
  9. aws rds恢复数据库_Amazon RDS – AWS关系数据库服务
  10. Word2Vec入门
  11. NLP算法面试的一些个人建议
  12. Linux nexus3的搭建
  13. ubuntu上安装 ibus Google拼音输入法解决中文输入问题
  14. 人脸识别 android demo,Android集成人脸识别demo分享
  15. 路由器与交换机的关系
  16. YDOOK: Python:requests: Scanic: 客户端 client 向服务器请求照片并返回 post请求
  17. mysql 8.XXX zip版的安装使用
  18. B2C电子商务系统研发——促销引擎设计(一)
  19. 玉米社:什么是差异化营销,差异化营销案例有哪些?
  20. Xcode8.1如何支持iOS8.0以下版本

热门文章

  1. gamit运行报错 grep SP file :bad year 2021
  2. docker运行yyets_docker 安装 运行 卸载
  3. C# 短信通知(中国网建sms短信平台API)
  4. Ontrack EasyRecovery 数据恢复 v16.0.0.2(简体中文汉化)技术员一款全面的U盘硬盘内存卡数据恢复软件
  5. Python从txt文件中提取特定数据
  6. 2G/3G核心网演进与网络结构
  7. 中国广电进入移动通信市场,或有望抢夺联通和电信的用户
  8. sql实现手机号正则验证
  9. 居记羊汤小BG -zz from 楠楠
  10. hbase 根据timestamp获取最新的数据