Java备忘录模式

Java备忘录模式

简介

备忘录模式是一种行为设计模式,它允许在不破坏封装的情况下捕获和恢复对象的内部状态。备忘录模式属于对象行为模式。

在软件开发中,我们经常需要保存某个对象的中间状态,以便后续恢复。例如,文本编辑器中的撤销/重做操作、游戏中的存档和恢复功能等。

备忘录模式的核心思想是将对象的状态保存在一个备忘录对象中,然后在需要恢复时将其取回。备忘录对象通常由一个负责人对象管理,以便随时回退到之前的状态。

代码实现

定义备忘录对象,用于保存需要恢复的状态:

public class Memento {
    private final String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

定义对象,它可以创建备忘录对象并从备忘录对象恢复状态:

public class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

定义负责人对象,它管理备忘录对象:

public class Caretaker {
    private final List<Memento> mementoList = new ArrayList<>();

    public void add(Memento state) {
        mementoList.add(state);
    }

    public Memento get(int index) {
        return mementoList.get(index);
    }
}

使用备忘录模式:

public class Demo {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();
        
        originator.setState("State #1");
        originator.setState("State #2");
        caretaker.add(originator.saveStateToMemento());
        
        originator.setState("State #3");
        caretaker.add(originator.saveStateToMemento());
        
        originator.setState("State #4");
        
        System.out.println("Current state: " + originator.getState());    
        originator.getStateFromMemento(caretaker.get(0));
        System.out.println("First saved state: " + originator.getState());
        originator.getStateFromMemento(caretaker.get(1));
        System.out.println("Second saved state: " + originator.getState());
    }
}

输出结果:

Current state: State #4
First saved state: State #2
Second saved state: State #3

优点

  • 备忘录模式实现了对象状态的封装,使得客户端无法直接访问对象的状态,保护了对象的一致性和完整性。
  • 备忘录模式实现了历史记录的功能,可以在需要的时候撤销到之前的状态。
  • 备忘录模式可以简化原始对象的接口,只需要将必要的状态提取到备忘录对象中即可。

缺点

  • 备忘录模式会增加额外的内存开销,因为需要保存对象状态的副本。
  • 如果需要保存的对象状态非常复杂,创建和恢复备忘录对象的时间和空间开销可能会很大。

适用场景

  • 保护和恢复对象的状态,使得客户端可以随时撤销到之前的状态。
  • 需要记录对象的历史记录。

总结

备忘录模式是一种灵活的设计模式,可以方便地实现对象状态的保存和恢复。虽然备忘录模式会增加额外的内存开销,但在需要实现撤销和重做功能等场景下,备忘录模式具有非常实用的价值。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值