您好,欢迎来到年旅网。
搜索
您的当前位置:首页【学习笔记】设计模式-备忘录模式(Memento)

【学习笔记】设计模式-备忘录模式(Memento)

来源:年旅网

0 设计模式

不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式

1 备忘录模式

备忘录模式主要的作用是保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

类似于:后悔药、打游戏时的存档、Windows 里的 ctri + z、浏览器中的后退、数据库的事务管理。

2 实现思路

备忘录模式使用三个类 Memento、Originator 和 CareTaker。

Memento 包含了要被恢复的对象的状态。

Originator 创建并在 Memento 对象中存储状态。

Caretaker 对象负责从 Memento 中恢复对象的状态。

3 需要的类

4 具体实现

4.1 Memento(备忘录)

/**
 * Memento 包含了要被恢复的对象的状态。
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/27 17:53
 */
public class Memento {

    private String state;

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

    public String getState(){
        return state;
    }
}

4.2 Originator(目标对象)

/**
 * Originator 创建并在 Memento 对象中存储状态。
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/27 17:
 */
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();
    }
}

4.3 CareTaker(管理者)

/**
 * Caretaker 对象负责从 Memento 中恢复对象的状态。
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/27 17:57
 */
public class CareTaker {

    private List<Memento> mementoList = new ArrayList<>();

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

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

4.4 测试类

/**
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/27 17:59
 */
public class Test {
    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());
    }
}

5 思维导图

6 示例源码地址

最后

我是通过马士兵老师的视频和菜鸟教程学习的,部分内容可能会有雷同

想阅读更多设计模式相关文章,欢迎到我的专栏【设计模式学习笔记】、【设计模式】中去查看

在23篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路

感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎关注程序员五条

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务