java memento_Java备忘录(Memento)模式实现的示例代码
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)模式实现的示例代码相关推荐
- 用Java做手机备忘录_Java 实现备忘录(Memento)模式
/** * 数据对象 * @author stone * */ public class DataState { private String action; public void setActio ...
- 设计模式学习笔记——备忘录(Memento)模式
设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...
- 设计模式--备忘录(Memento)模式
模式定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态 类图 要点总结 备忘录(Memento)存储原发器(Originato ...
- JAVA 23种开发模式详解(代码举例)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 计算机毕业设计中JAVA 23种开发模式详解(代码举例)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式
在大部分游戏中,都有一个"存档点"的概念.比如,在挑战boss前,游戏会在某个地方存档,假设玩家挑战boss失败,则会从这个存档点開始又一次游戏.因此,我们能够将这个"存 ...
- 策略模式思想及示例代码(Strategy)
策略模式: 策略模式是:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. Spring 中在实例化对象的时候用到 Strategy 模式,在 S ...
- char栈java,Java数据结构与算法-栈和队列(示例代码)
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- java 时间api源码,时间API(示例代码)
1. 时间API 我们的时间在java里是long类型的整数,这个整数称之为时间戳(也叫格林威治时间),即从1970-01-01到现在为止所经过的毫秒数,单有这个时间戳是不能准确表达世界各地的时间,还 ...
最新文章
- OKR目标管理法不会用?看最新客户服务团队OKR模板
- 手机main.html文件,tab-main.html
- 我的Go语言学习之旅四:各种变量的声明
- 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退栈 Intent FLAG...
- #includeunistd.h存在linux中,含有系统服务的函数
- Vue与服务端数据交互 [ axios ]
- IOS UI 第三篇:基本UI
- spring事务管理的一些注意点
- aws rds恢复数据库_Amazon RDS – AWS关系数据库服务
- Word2Vec入门
- NLP算法面试的一些个人建议
- Linux nexus3的搭建
- ubuntu上安装 ibus Google拼音输入法解决中文输入问题
- 人脸识别 android demo,Android集成人脸识别demo分享
- 路由器与交换机的关系
- YDOOK: Python:requests: Scanic: 客户端 client 向服务器请求照片并返回 post请求
- mysql 8.XXX zip版的安装使用
- B2C电子商务系统研发——促销引擎设计(一)
- 玉米社:什么是差异化营销,差异化营销案例有哪些?
- Xcode8.1如何支持iOS8.0以下版本
热门文章
- gamit运行报错 grep SP file :bad year 2021
- docker运行yyets_docker 安装 运行 卸载
- C# 短信通知(中国网建sms短信平台API)
- Ontrack EasyRecovery 数据恢复 v16.0.0.2(简体中文汉化)技术员一款全面的U盘硬盘内存卡数据恢复软件
- Python从txt文件中提取特定数据
- 2G/3G核心网演进与网络结构
- 中国广电进入移动通信市场,或有望抢夺联通和电信的用户
- sql实现手机号正则验证
- 居记羊汤小BG -zz from 楠楠
- hbase 根据timestamp获取最新的数据