23种设计模式:备忘录模式

备忘录模式

1.介绍

概念

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

主要作用

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

解决的问题

所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

使用场景

1、需要保存/恢复数据的相关状态场景。 2、提供一个可回滚的操作。3.相当于VM虚拟机的快照操作。
(引用自菜鸟教程)

2.实现

背景

创建一个游戏存档类、游戏存档储存类和一个游戏存档管理类,可以实现保存当前游戏游戏状态,以及回到之前保存的状态。

实现步骤

1.创建Archive类

public class Archive {
    private String state;

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

    public String getState() {
        return state;
    }
}

2.创建Store类

public class Store {
    private String state;

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

    public String getState() {
        return state;
    }
    public Archive saveStateToArchive() {
        return new Archive(state);
    }
    public void getStateFromArchive(Archive archive) {
        state = archive.getState();
    }
}

3.创建ArchiveManage类

public class ArchiveManage {
    private List<Archive> archiveList = new ArrayList<>();

    public void add(Archive archive) {
        archiveList.add(archive);
    }
    public Archive get(int index) {
        return archiveList.get(index);
    }
}

4.创建测试类

public class MementoPatternDemo {
    public static void main(String[] args) {
        Store store = new Store();
        ArchiveManage archiveManage = new ArchiveManage();

        store.setState("State #1");
        archiveManage.add(store.saveStateToArchive());
        store.setState("State #2");
        archiveManage.add(store.saveStateToArchive());
        store.setState("State #3");

        System.out.println("当前存档状态: " + store.getState());

        System.out.println("回到状态1: ");
        store.getStateFromArchive(archiveManage.get(0));
        System.out.println("当前状态: " + store.getState());

        System.out.println("回到状态2: ");
        store.getStateFromArchive(archiveManage.get(1));
        System.out.println("当前状态: " + store.getState());
    }
}

5.运行结果

当前存档状态: State #3
回到状态1:
当前状态: State #1
回到状态2:
当前状态: State #2

posted @ 2021-09-25 17:18  Dawnlight-_-  阅读(37)  评论(0编辑  收藏  举报