[设计模式] 行为型:备忘录模式(Memento Pattern)

文章目录

    • 什么是备忘录模式
    • 设计与实现

什么是备忘录模式

备忘录模式特别好理解,就是记录下当前状态,然后在将来某个时刻,执行恢复操作,还原到当前状态。

这是提前备份将来还原的思想,在生活中非常的常见。比如,操作系统装好以后,通常会备份个镜像文件,如果将来某一天系统出问题了,就拿镜像文件恢复系统。

明白了要做什么,就要考虑怎么去做,针对不同业务场景,实现方案是多种多样的。所有方案的核心点就一个,备份!

具体到代码层面,备份途径有很多选择,数据库、硬盘、甚至缓存、内存,都可以充当备份媒介。

怎么方便怎么做,怎么简单怎么来!

设计与实现

在应用程序中,备忘录模式的出现频率相对还是比较高的。只要是有备份还原的场景出现,就有备忘录模式的用武之地,常见的“撤销”操作就是。

很多备份还原的业务场景都是临时的,不需要保证永久的可恢复性,因此,只需要借助内存备份信息即可。复杂一些的业务场景,如需持久备份的,就需借助数据库、文件等能够持久化的媒介。

从代码层面看,备忘录模式的设计与实现,没什么特别的,就是写出个备忘逻辑而已:

// 目标对象,state信息需要备忘
public 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 restoreMemento(Memento memento) {
        this.setState(memento.getState());
    }
}

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

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

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

    public String getState() {
        return state;
    }
}

// 测试方法
public static void main(String[] args) {
    Originator originator = new Originator();
    originator.setState("状态S0");
    Memento memento = originator.createMemento(); // 备忘
    originator.setState("状态S1");
    originator.setState(memento.getState());// 还原之前的状态
    System.out.println(originator.getState());
}

备忘录模式就像个“月光宝盒”,可以回到过去,想“后悔”的时候真心管用。

同时,它的变化也是多种多样,真想备忘,程序也不会设计的如此简单,备忘数据及备忘深度也会更加复杂。

理解备忘录模式的含义即可,设计实现上没有定式,怎么方便怎么严谨就怎么来。

你可能感兴趣的:(设计模式,java,设计模式,备忘录模式,备忘录)