Java设计模式-备忘录模式(Memento)

简介: Java设计模式-备忘录模式(Memento)

文章目录

一、前言

备忘录模式在日常生活中应用挺多,如word自动保存副本备份,提交代码前备份,数据库操作日志等,以防出现异常可以进行恢复原来的状态。本篇简介的示例代码实现备忘录模式,这示例也是2022上半年软设考试的Java设计模式题目。

二、备忘录模式

1. 概念

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。如果出现问题则可以进行恢复到原先保存的状态。

2.如何解决?

通过一个备忘录类专门存储对象状态。

3.怎么使用?

客户不与备忘录类耦合,与备忘录管理类耦合。

三、备忘录模式示例代码

1.创建备忘录类

/**

* 备忘录

*/

public class Memento {

   private String state;

   public Memento(String state) {

       this.state = state;

   }

   public String getState() {

       return state;

   }

   public void setState(String state) {

       this.state = state;

   }

}

2.原来的类

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();

   }

}

3.备忘录管理类

public class MementoManager {

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

   public void add(Memento state){

       mementoList.add(state);

   }

   public Memento get(int index) {

       return mementoList.get(index);

   }

}

4.测试

package behavior.MementoPattern;

public class MementoPatternDemo {

   public static void main(String[] args) {

       Originator originator =new Originator();

       MementoManager mementoManager = new MementoManager();

       originator.setState("State #1");

       mementoManager.add( originator.saveStateToMemento());

       originator.setState("State #2");

       mementoManager.add(originator.saveStateToMemento());

       originator.setState("State #3");

       mementoManager.add( originator.saveStateToMemento());

       originator.setState("State #4");

       System.out.println("Current State: " + originator.getState());

       originator.getStateFromMemento(mementoManager.get(0));

       System.out.println("First saved State: " + originator.getState());

       originator.getStateFromMemento(mementoManager.get(1));

       System.out.println("Second saved State: " + originator.getState());

       originator.getStateFromMemento(mementoManager.get(2));

       System.out.println("Third saved State: " + originator.getState());

   }

}

打印输出:

Current State: State #4

First saved State: State #1

Second saved State: State #2

Third saved State: State #3

四 总结

备忘录模式在数据库备份恢复中比较常用,分布式事务seata中也用到了,回滚操作的时候会将记录的操作日志进行恢复原始的状态。

相关文章
|
3天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
3天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
3天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
3天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
3天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
9天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
11天前
|
存储 设计模式 安全
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
备忘录模式是一种行为设计模式,允许在不破坏对象封装性的情况下保存和恢复对象的内部状态。该模式通过创建备忘录对象来存储发起人的状态信息,发起人可根据需要创建和恢复备忘录。管理者则负责保存和管理备忘录,但无法访问其内容。备忘录模式简化了状态管理,支持撤销操作和历史记录功能,提高了系统的灵活性和可用性。在实际应用中,备忘录模式常用于文本编辑器、游戏和数据库事务处理等场景,确保对象状态的安全恢复和有效管理。通过备忘录模式,开发人员可以更好地控制对象状态的变化,提升软件系统的健壮性和用户体验。
29 1
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
|
12天前
|
设计模式 算法 Java
小谈设计模式(30)—Java设计模式总结
小谈设计模式(30)—Java设计模式总结
|
13天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
17天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
15 0