编程语言
首页 > 编程语言> > 23种设计模式-java-备忘录

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