23种设计模式-java-备忘录
作者:互联网
模式概述:
允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
使用场景:
1.当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。
2.当直接访问对象的成员变量、 获取器或设置器将导致封装被突破时, 可以使用该模式。
代码样例:
/**
* 编辑器
*/
public class Editor {
StringBuilder text = new StringBuilder();
public String getText(){
return text.toString();
}
public void add(String string){
text.append(string);
}
/**
* 创建快照
*/
public Snapshot createSnapshot(){
return new Snapshot(text.toString());
}
/**
* 恢复快照
*/
public void restoreSnapshot(Snapshot snapshot){
this.text.replace(0,text.length(),snapshot.getText());
}
}
/**
* 快照对象
* 应与原发器的属性保持一致(需要备份的属性),构造方法对所有属性赋值,并提供各个属性的访问方法
*/
public class Snapshot {
String text;
public Snapshot(String text) {
this.text = text;
}
public String getText(){
return text;
}
}
/**
* 历史快照容器
*/
public class SnapthodHolder {
Stack<Snapshot> his = new Stack<>();
public void push(Snapshot snapshot){
his.push(snapshot);
}
public Snapshot pop(){
if(!his.isEmpty()){
return his.pop();
}else{
return null;
}
}
}
/**
* 测试备忘录
*/
public class TestMomento {
public static void main(String[] args) {
Editor editor = new Editor();
SnapthodHolder snapthodHolder = new SnapthodHolder();
System.out.println("Editor初始值:"+editor.getText());
snapthodHolder.push(editor.createSnapshot());
editor.add("123");
System.out.println("Editor添加一次后:"+editor.getText());
snapthodHolder.push(editor.createSnapshot());
editor.add("abc");
System.out.println("Editor添加二次后:"+editor.getText());
Snapshot snapshot1= snapthodHolder.pop();
if(snapshot1 !=null) editor.restoreSnapshot(snapshot1);
System.out.println("Editor进行一次撤销后:"+editor.getText());
Snapshot snapshot2= snapthodHolder.pop();
if(snapshot2 !=null) editor.restoreSnapshot(snapshot2);
System.out.println("Editor进行二次撤销后:"+editor.getText());
}
}
测试结果:
标签:java,23,text,getText,Snapshot,editor,设计模式,public,Editor 来源: https://blog.csdn.net/weixin_38608005/article/details/118686167