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

本文介绍了Java中备忘录(Memento)模式的实现,通过示例代码展示了如何使用该模式保存和恢复对象的内部状态。首先定义了数据对象`DataState`,接着创建了`Memento`类用于保存`Originator`对象的状态,`Originator`类负责创建和设置备忘录。在测试类`Test`中,演示了如何使用备忘录模式进行状态的保存和恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值