4.6 备忘录模式(Memento)

备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,以便以后可以将该对象恢复到原先保存的状态。

1. 核心思想

想象一下,你在玩游戏时,想要保存当前的游戏进度,以便之后可以从保存点继续游戏。备忘录模式就像游戏中的存档功能,它可以保存游戏角色的状态、道具、地图进度等信息,让你可以随时恢复到之前的状态。

备忘录模式的核心思想就是:在不暴露对象内部结构的情况下,保存和恢复对象的内部状态

2. 组成要素

  • Originator (发起人): 需要保存状态的类。它创建一个备忘录对象,并将自己的状态存储在备忘录中。
  • Memento (备忘录): 存储 Originator 对象的内部状态。备忘录对象通常是一个私有的内部类,只有 Originator 可以访问其内部状态。
  • Caretaker (管理者): 负责保存和恢复备忘录对象。Caretaker 对象通常不知道备忘录对象的具体内容,它只是简单地保存和恢复备忘录对象。

3. 代码示例 (Java)

// 发起人
class Originator {
    private String state;

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

    public String getState() {
        return state;
    }

    // 创建备忘录
    public Memento createMemento() {
        return new Memento(state);
    }

    // 恢复状态
    public void restoreFromMemento(Memento memento) {
        state = memento.getState();
    }

    // 备忘录 (内部类)
    private static class Memento {
        private final String state;

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

        private String getState() {
            return state;
        }
    }
}

// 管理者
class Caretaker {
    private Memento memento;

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

    public Memento getMemento() {
        return memento;
    }
}

// 测试
public class Client {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        // 设置初始状态
        originator.setState("State 1");
        System.out.println("Initial state: " + originator.getState());

        // 创建备忘录并保存
        caretaker.setMemento(originator.createMemento());

        // 修改状态
        originator.setState("State 2");
        System.out.println("New state: " + originator.getState());

        // 从备忘录恢复状态
        originator.restoreFromMemento(caretaker.getMemento());
        System.out.println("Restored state: " + originator.getState());
    }
}

4. 使用场景

  • 需要保存和恢复对象的内部状态,例如撤销操作、数据库事务等。
  • 希望在不暴露对象内部结构的情况下,保存和恢复对象的内部状态。

5. 优缺点

优点:

  • 可以在不破坏封装性的前提下,保存和恢复对象的内部状态。
  • 简化了 Originator 类的代码,将状态管理的责任分离出来。

缺点:

  • 如果 Originator 对象的状态需要保存的信息很多,那么备忘录对象可能会占用大量的内存。

6. 总结

备忘录模式提供了一种有效的方式来保存和恢复对象的内部状态,它可以在不破坏封装性的前提下,实现状态的保存和恢复。但是,在使用备忘录模式时,需要注意备忘录对象的大小,避免占用过多的内存。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值