Java设计模式之行为型-备忘录模式(UML类图+案例分析)

这篇具有很好参考价值的文章主要介绍了Java设计模式之行为型-备忘录模式(UML类图+案例分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、基础概念

二、UML类图

三、角色设计

四、案例分析

五、总结 


一、基础概念

备忘录模式是一种行为型设计模式,它允许保存一个对象的内部状态到一个备忘录对象中,这样就可以在需要的时候恢复这个对象的状态了,同时又不违反封装性原则。

这个模式的核心就是备忘录对象,它负责存储目标对象的内部状态信息,并且可以通过方法访问这些状态数据。而目标对象负责创建备忘录对象,并在备忘录对象中保存自身状态。管理者角色负责存储和恢复备忘录对象,但是不能直接看到或者修改备忘录对象中的状态数据。 

二、UML类图

Java设计模式之行为型-备忘录模式(UML类图+案例分析),Java,设计模式,java,设计模式,备忘录模式

三、角色设计

角色 描述
发起人角色 负责创建一个备忘录,记录自身需要保存的状态,具备回滚的功能
备忘录角色 用于存储发起人角色的内部状态,而且可以防止发起人角色以外的对象访问权限
管理者角色 负责存储、提供管理备忘录角色,不可以修改备忘录角色的内容

四、案例分析

在我们日常开发中,必备的版本控制工具就是Git,可以提交版本,回滚到指定版本,下面我们就通过备忘录设计模式来实现一个简单的版本控制功能,代码如下:

它扮演备忘录角色,用于存储某个时刻的状态快照。它有两个成员变量version和content,分别记录版本号和内容:

public class Commit {

    private String version;
    private String content;

    public Commit(String version, String content) {
        this.version = version;
        this.content = content;
    }

    public String getVersion() {
        return version;
    }

    public String getContent() {
        return content;
    }

}

Repository类是发起人角色,它管理具体的内容。该类有一个成员变量content记录内容,以及setContent和getContent方法用于设置和获取内容。另外还有一个commit方法可以保存一个状态快照,和一个rollback方法可以从快照恢复状态。

public class Repository {

    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Commit commit(String version) {
        return new Commit(version, content);
    }

    public void rollback(Commit commit) {
        content = commit.getContent();
    }

}

Git类在这里是管理者角色,它持有一个Commit对象列表来记录每次提交的备忘录。该类提供了commit和rollback两种方法,commit是保存新提交的备忘录,rollback可以回滚到指定版本。

import java.util.ArrayList;
import java.util.List;

public class Git {

    private List<Commit> commits = new ArrayList<>();

    public void commit(Repository repo, String version) {
        commits.add(repo.commit(version));
    }

    public void rollback(Repository repo, String version) {
        for(Commit commit : commits) {
            if(commit.getVersion().equals(version)) {
                repo.rollback(commit);
                break;
            }
        }
    }
}

模拟一个客户端,演示了这个存储库的基本用法。首先创建Repository和Git对象,然后新增几个版本到存储库,最后回滚到第一个版本,在关键点会打印输出内容,以展示执行流程。 

public class Client {

    public static void main(String[] args) {
        Repository repository = new Repository();
        Git git = new Git();

        repository.setContent("version 1");
        git.commit(repository, "version 1");

        repository.setContent("version 2");
        git.commit(repository, "version 2");

        repository.setContent("version 3");
        git.commit(repository, "version 3");

        git.rollback(repository, "version 1");
        System.out.println(repository.getContent());
    }
}

运行结果如下: 

Java设计模式之行为型-备忘录模式(UML类图+案例分析),Java,设计模式,java,设计模式,备忘录模式

整体上这个例子使用了备忘录模式的三个主要角色,将状态存入备忘录对象,发起人负责状态的管理和保存,管理者保存备忘录的历史,从而实现了版本控制和回滚的功能。这就是一个使用备忘录模式实现简单Git版本控制的设计和执行过程。 

五、总结 

优点:

1、提供了保持对象内部状态历史的能力,可以方便地将对象恢复到历史某个状态。

2、实现了内部状态的封装,除了创建它的发起人之外,其他对象都不能访问这些状态信息。

3、简化了发起人类,发起人不需要管理和保存其内部状态的各个历史版本,所有状态历史由管理者完成。

缺点:

1、资源消耗大,如果要保存的历史状态很多,会占用较多内存资源。

2、破坏了对象的封装性,其他对象可以通过管理者访问发起人的内部状态。

3、复杂度较高,需要维护发起人、备忘录、管理者三个角色对象。

应用场景:

1、需要保存对象在某个时刻的状态快照,比如实现撤销操作。

2、需要对对象的状态历史保持跟踪,如游戏进度保存。

3、当对象的状态变化复杂时,可以使用备忘录模式保持对象内部状态的一致性。

4、当直接访问封装的对象需要暴露对象实现细节时,可以通过备忘录间接访问对象状态。

符合的设计原则:

1、开闭原则(Open Close Principle)

开闭原则要求软件实体应对扩展开放,对修改关闭。备忘录模式通过创建新的备忘录类来保存和恢复对象状态,扩展了现有类的功能,而无需修改这些类的代码。符合了对扩展开放的要求。

2、里氏替换原则(Liskov Substitution Principle)

备忘录模式中,备忘录类和原发器类都可以继承于更通用的基类,符合里氏替换原则。 

3单一职责原则(Single Responsibility Principle)

单一职责原则要求一个类只有一个引起它变化的原因。备忘录模式中,原发器类负责业务逻辑,备忘录类负责存储状态,管理者类负责备忘录的管理,每一个类都只有单一职责。

4、组合复用原则(Composite Reuse Principle)

备忘录对象作为原发器对象状态的组合,可以重复利用,遵守组合复用原则。 文章来源地址https://www.toymoban.com/news/detail-592891.html

到了这里,关于Java设计模式之行为型-备忘录模式(UML类图+案例分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 03-JAVA设计模式-备忘录模式

    Java中的备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将对象恢复到原先保存的状态。 主要角色包括: 发起者(Originator):需要保存和恢复状态的对象。它记录当前

    2024年04月26日
    浏览(43)
  • Java设计模式之备忘录模式详解

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一起探讨Java设计模式之备忘录模式,这种像时间旅行般的对象记忆术,是如何在程序的世界里实现的。 备忘录模式的引入 备忘录模式是一种

    2024年01月22日
    浏览(69)
  • 【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,可以从备忘录对象恢复到大战前的状态 针对每一种角色,设计一个类来存储该角色的状态 【分析】 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏

    2024年02月13日
    浏览(56)
  • 《设计模式》备忘录模式

    定义 : 备忘录模式又称为快照模式或者令牌模式, 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 属性 行为型 模式。 备忘录模式的角色组成 : Originator(发起人) :负责创建一个 Memento

    2024年02月06日
    浏览(45)
  • 【设计模式】备忘录模式

    主页传送门: 💁 传送        备忘录(Memento Pattern)模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。。其定义如下: Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state later.        即:在不破坏封

    2024年02月07日
    浏览(51)
  • 设计模式——备忘录模式

    备忘录模式(Memento Pattern)是一种行为型设计模式,它在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在需要时将对象恢复到先前的状态。 发起人(Originator): 是拥有复杂内部状态的对象,它可以创建和恢复备忘录。 备忘录(M

    2024年01月19日
    浏览(42)
  • 设计模式-备忘录模式

    备忘录模式(Memento Pattern)是计算机科学中的一种行为设计模式。它提供了一种在不破坏封装性的前提下,捕获和恢复对象内部状态的方法。这种模式主要用于在用户需要回滚到对象的某个先前状态时,能够实现状态的还原。 在备忘录模式中,主要涉及到三个角色: Origina

    2024年01月23日
    浏览(48)
  • 【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    备忘录模式(Memento Pattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式

    2023年04月20日
    浏览(73)
  • 【前端设计模式】之备忘录模式

    设计模式是在软件开发中经过验证的解决问题的方法。它们是从经验中总结出来的,可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和可重用性。无论是前端还是后端开发,设计模式都扮演着重要的角色。在本专栏中,我们将探索一些常见的前端设计模

    2024年02月05日
    浏览(43)
  • 设计模式(十八)备忘录

    在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式是一种对象行为型模式,其别名为标记(Token)模式。 备忘录模式的核心在于备忘录类以及用于管理备忘录的负责人类的设计,包

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包