Java设计模式(十九)备忘录模式

一、概述

备忘录模式是一种行为型设计模式,用于捕获和存储对象的内部状态,并在需要时将对象恢复到之前的状态。备忘录模式允许在不暴露对象内部实现细节的情况下,对对象进行状态的保存和恢复。

在备忘录模式中,主要涉及三个角色:

  • 发起人(Originator):负责创建备忘录对象,并将其当前状态保存到备忘录中,也可以从备忘录中恢复自身状态。
  • 备忘录(Memento):用于存储发起人的状态,通常具备对发起人状态的访问权限。
  • 管理者(Caretaker):负责管理备忘录对象,可以保存多个备忘录对象,并在需要时将其提供给发起人进行状态的恢复。

二、代码

下面是一个备忘录模式的代码示例,其中我们定义了发起人类 Originator、备忘录类 Memento 和管理者类 Caretaker

//1.备忘录类
public class Memento {
    private String state;

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

    public String getState() {
        return state;
    }
}
//2.发起人
public class Originator {
    private String state;

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

    public String getState() {
        return state;
    }

    /**
     * 保存状态
     * @return
     */
    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    /**
     * 恢复状态
     * @param memento
     */
    public void restoreStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}
//3.管理者类
public class Caretaker {
    private List<Memento> mementos = new ArrayList<>();

    public void addMemento(Memento memento) {
        mementos.add(memento);
    }

    public Memento getMemento(int index) {
        return mementos.get(index);
    }
}
//4.测试代码
public class Test {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        // 设置初始状态
        originator.setState("State 1");
        caretaker.addMemento(originator.saveStateToMemento());

        // 修改状态
        originator.setState("State 2");
        caretaker.addMemento(originator.saveStateToMemento());

        // 恢复到初始状态
        originator.restoreStateFromMemento(caretaker.getMemento(0));
        System.out.println("Current State: " + originator.getState());

        // 恢复到修改后的状态
        originator.restoreStateFromMemento(caretaker.getMemento(1));
        System.out.println("Current State: " + originator.getState());
    }
}

在测试代码中,我们创建了发起人对象 Originator 和管理者对象 Caretaker。首先,我们设置了发起人的初始状态,并将其保存到备忘录中(通过调用 saveStateToMemento() 方法)。然后,我们修改了发起人的状态,并将其再次保存到备忘录中。接下来,我们通过调用 restoreStateFromMemento() 方法,从备忘录中恢复发起人的状态。最后,我们分别打印出发起人当前的状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dantesding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值