大家好,又见面了,我是你们的朋友全栈君。
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
涉及到的角色描述
originator(发起人): 负责创建一个备忘录memento,用来记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。originator可根据需要决定memento存储它的哪些内部状态
memento(备忘录): 负责存储originator的内部状态,并可防止originator以外的其他对象访问备忘录memento。备忘录有两个接口,caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。originator能够看到一个宽接口,允许它访问返回先前状态所需的所有数据。
caretaker(管理者): 负责保存好备忘录memento,不能对备忘录的内容进行操作或检查。
优点:
1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:
消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
使用场景:
1、需要保存/恢复数据的相关状态场景。
2、提供一个可回滚的操作。
具体代码实现
创建备忘录
package com.chenpt.designModel.mementoModel;
/**
* @Author: chen
* @Description: 备忘录类
* @Date: created in 2018/8/28
* @Modified By:
*/
public class Memento {
private String state;
//构造方法将相关数据导入
Memento(String state){
this.state = state;
}
//需要保存的数据属性,可以是多个
public String getState() {
return state;
}
}
创建发起人
package com.chenpt.designModel.mementoModel;
/**
* @Author: chen
* @Description: 发起人
* @Date: created in 2018/8/28
* @Modified By:
*/
public class Originator {
private String state;//需要保存的属性
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
/**
* 创建备忘录,将当前需要保存的数据导入并实例化一个memento对象
* @return
*/
public Memento setStateToMemento(){
return new Memento(state);
}
/**
* 恢复备忘录,将memento导入并将相关数据恢复
* @param memento
*/
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
/**
* 数据展示
*/
public void show(){
System.out.println(state);
}
}
创建管理者
package com.chenpt.designModel.mementoModel;
/**
* @Author: chen
* @Description: 管理者
* @Date: created in 2018/8/28
* @Modified By:
*/
public class CareTaker {
private Memento memento;//得到或设置备忘录
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
客户端
package com.chenpt.designModel.mementoModel;
/**
* @Author: chen
* @Description:
* @Date: created in 2018/8/28
* @Modified By:
*/
public class MainTest {
public static void main(String[] a){
Originator originator = new Originator();
originator.setState("on");
originator.show();
CareTaker careTaker = new CareTaker();
careTaker.setMemento(originator.setStateToMemento());
originator.setState("off");
originator.show();
originator.getStateFromMemento(careTaker.getMemento());
originator.show();
}
}
//执行结果
on
off
on
转载于:https://www.cnblogs.com/chenpt/p/9547988.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107341.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...