Java 设计模式之备忘录学习与掌握

Posted 邹奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 设计模式之备忘录学习与掌握相关的知识,希望对你有一定的参考价值。

定义

  • 在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。

备忘录模式是一种对象行为型模式


优点

  • 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。
  • 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。
  • 简化了发起者类。发起者不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由备忘录管理者进行管理,这符合单一职责原则。

缺点

  • 资源消耗大。如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源。

模式的结构与实现

备忘录模式的核心是设计备忘录类以及用于管理备忘录的管理者类

模式的结构

角色如下:

  • 备忘录角色】负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
  • 备忘录管理者】对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
  • 发起者角色】记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。

模式的实现

  • 【备忘录】,代码如下:
/**
 * 备忘录:储发起人的内部状态
 */
public class Memo 

    private String state;

    public Memo(String state) 
        this.state = state;
    

    public String getState() 
        return state;
    

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

  • 备忘录管理者】,代码如下:
/**
 * 管理者:提供保存与获取备忘录的功能,
 *        但其不能对备忘录的内容进行访问与修改
 */
public class MemoManager 

    private Memo memo;

    public Memo getMemo() 
        return memo;
    

    public void setMemo(Memo memo) 
        this.memo = memo;
    

  • 发起者】,代码如下:
/**
 * 发起者:记录内部状态信息
 * 提供创建备忘录和恢复备忘录数据功能
 */
public class Originator 

    private String state;

    public String getState() 
        return state;
    

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

    // 创建备忘录
    public Memo createMemo()
        return new Memo(state);
    

    // 恢复备忘录
    public void restoreMemo(Memo memo)
        this.state = memo.getState();
    


  • 【客户端】,调用代码如下:
	/**
     * 备忘录模式
     */
    private void principle_memo() 
        // 创建发起人并设置初始状态
        Originator originator = new Originator();
        originator.setState("亚瑟捕猎传说熊去了...");
        System.out.println(":> 初始状态 = " + originator.getState());

        // 备忘录管理者 保存 发起者创建的备忘录 供下次恢复用
        MemoManager memoManager = new MemoManager();
        memoManager.setMemo(originator.createMemo());

        // 发起人设置新状态
        originator.setState("亚瑟执行剧情任务去了...");
        System.out.println(":> 新状态 = " + originator.getState());

        // 恢复状态
        originator.restoreMemo(memoManager.getMemo());
        System.out.println(":> 恢复状态 = " + originator.getState());
    
  • 运行结果】,如下图示:


应用场景

  • 需要保存与恢复数据的场景;如游戏存档。
  • 需要提供一个可回滚操作的场景;如记事本软件在编辑时的撤回操作。

技术永不眠!我们下期见!

以上是关于Java 设计模式之备忘录学习与掌握的主要内容,如果未能解决你的问题,请参考以下文章

Java 设计模式之备忘录学习与掌握

Java 设计模式之备忘录学习与掌握

Java 设计模式之命令学习与掌握

Java 设计模式之命令学习与掌握

Java 设计模式之命令学习与掌握

设计模式之状态模式与备忘录模式详解和应用