国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析)

這篇具有很好參考價值的文章主要介紹了Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、基礎(chǔ)概念

二、UML類圖

三、角色設(shè)計

四、案例分析

五、總結(jié)?


一、基礎(chǔ)概念

備忘錄模式是一種行為型設(shè)計模式,它允許保存一個對象的內(nèi)部狀態(tài)到一個備忘錄對象中,這樣就可以在需要的時候恢復(fù)這個對象的狀態(tài)了,同時又不違反封裝性原則。

這個模式的核心就是備忘錄對象,它負責存儲目標對象的內(nèi)部狀態(tài)信息,并且可以通過方法訪問這些狀態(tài)數(shù)據(jù)。而目標對象負責創(chuàng)建備忘錄對象,并在備忘錄對象中保存自身狀態(tài)。管理者角色負責存儲和恢復(fù)備忘錄對象,但是不能直接看到或者修改備忘錄對象中的狀態(tài)數(shù)據(jù)。?

二、UML類圖

Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析),Java,設(shè)計模式,java,設(shè)計模式,備忘錄模式

三、角色設(shè)計

角色 描述
發(fā)起人角色 負責創(chuàng)建一個備忘錄,記錄自身需要保存的狀態(tài),具備回滾的功能
備忘錄角色 用于存儲發(fā)起人角色的內(nèi)部狀態(tài),而且可以防止發(fā)起人角色以外的對象訪問權(quán)限
管理者角色 負責存儲、提供管理備忘錄角色,不可以修改備忘錄角色的內(nèi)容

四、案例分析

在我們?nèi)粘i_發(fā)中,必備的版本控制工具就是Git,可以提交版本,回滾到指定版本,下面我們就通過備忘錄設(shè)計模式來實現(xiàn)一個簡單的版本控制功能,代碼如下:

它扮演備忘錄角色,用于存儲某個時刻的狀態(tài)快照。它有兩個成員變量version和content,分別記錄版本號和內(nèi)容:

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類是發(fā)起人角色,它管理具體的內(nèi)容。該類有一個成員變量content記錄內(nèi)容,以及setContent和getContent方法用于設(shè)置和獲取內(nèi)容。另外還有一個commit方法可以保存一個狀態(tài)快照,和一個rollback方法可以從快照恢復(fù)狀態(tài)。

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;
            }
        }
    }
}

模擬一個客戶端,演示了這個存儲庫的基本用法。首先創(chuàng)建Repository和Git對象,然后新增幾個版本到存儲庫,最后回滾到第一個版本,在關(guān)鍵點會打印輸出內(nèi)容,以展示執(zhí)行流程。?

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

運行結(jié)果如下:?

Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析),Java,設(shè)計模式,java,設(shè)計模式,備忘錄模式

整體上這個例子使用了備忘錄模式的三個主要角色,將狀態(tài)存入備忘錄對象,發(fā)起人負責狀態(tài)的管理和保存,管理者保存?zhèn)渫浀臍v史,從而實現(xiàn)了版本控制和回滾的功能。這就是一個使用備忘錄模式實現(xiàn)簡單Git版本控制的設(shè)計和執(zhí)行過程。?

五、總結(jié)?

優(yōu)點:

1、提供了保持對象內(nèi)部狀態(tài)歷史的能力,可以方便地將對象恢復(fù)到歷史某個狀態(tài)。

2、實現(xiàn)了內(nèi)部狀態(tài)的封裝,除了創(chuàng)建它的發(fā)起人之外,其他對象都不能訪問這些狀態(tài)信息。

3、簡化了發(fā)起人類,發(fā)起人不需要管理和保存其內(nèi)部狀態(tài)的各個歷史版本,所有狀態(tài)歷史由管理者完成。

缺點:

1、資源消耗大,如果要保存的歷史狀態(tài)很多,會占用較多內(nèi)存資源。

2、破壞了對象的封裝性,其他對象可以通過管理者訪問發(fā)起人的內(nèi)部狀態(tài)。

3、復(fù)雜度較高,需要維護發(fā)起人、備忘錄、管理者三個角色對象。

應(yīng)用場景:

1、需要保存對象在某個時刻的狀態(tài)快照,比如實現(xiàn)撤銷操作。

2、需要對對象的狀態(tài)歷史保持跟蹤,如游戲進度保存。

3、當對象的狀態(tài)變化復(fù)雜時,可以使用備忘錄模式保持對象內(nèi)部狀態(tài)的一致性。

4、當直接訪問封裝的對象需要暴露對象實現(xiàn)細節(jié)時,可以通過備忘錄間接訪問對象狀態(tài)。

符合的設(shè)計原則:

1、開閉原則(Open Close Principle)

開閉原則要求軟件實體應(yīng)對擴展開放,對修改關(guān)閉。備忘錄模式通過創(chuàng)建新的備忘錄類來保存和恢復(fù)對象狀態(tài),擴展了現(xiàn)有類的功能,而無需修改這些類的代碼。符合了對擴展開放的要求。

2、里氏替換原則(Liskov Substitution Principle)

備忘錄模式中,備忘錄類和原發(fā)器類都可以繼承于更通用的基類,符合里氏替換原則。?

3、單一職責原則(Single Responsibility Principle)

單一職責原則要求一個類只有一個引起它變化的原因。備忘錄模式中,原發(fā)器類負責業(yè)務(wù)邏輯,備忘錄類負責存儲狀態(tài),管理者類負責備忘錄的管理,每一個類都只有單一職責。

4、組合復(fù)用原則(Composite Reuse Principle)

備忘錄對象作為原發(fā)器對象狀態(tài)的組合,可以重復(fù)利用,遵守組合復(fù)用原則。?文章來源地址http://www.zghlxwxcb.cn/news/detail-592891.html

到了這里,關(guān)于Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 03-JAVA設(shè)計模式-備忘錄模式

    03-JAVA設(shè)計模式-備忘錄模式

    Java中的備忘錄模式(Memento Pattern)是一種行為型設(shè)計模式,它允許在不破壞封裝性的前提下捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),以便以后可以將對象恢復(fù)到原先保存的狀態(tài)。 主要角色包括: 發(fā)起者(Originator):需要保存和恢復(fù)狀態(tài)的對象。它記錄當前

    2024年04月26日
    瀏覽(26)
  • Java設(shè)計模式之備忘錄模式詳解

    大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統(tǒng)3.0的小編,也是冬天不穿秋褲,天冷也要風(fēng)度的程序猿!今天,讓我們一起探討Java設(shè)計模式之備忘錄模式,這種像時間旅行般的對象記憶術(shù),是如何在程序的世界里實現(xiàn)的。 備忘錄模式的引入 備忘錄模式是一種

    2024年01月22日
    瀏覽(45)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——備忘錄模式Memento(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——備忘錄模式Memento(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    游戲角色有攻擊力和防御力,在大戰(zhàn)Boss前保存自身的狀態(tài)(攻擊力和防御力),當大戰(zhàn)Boss后攻擊力和防御力下降,可以從備忘錄對象恢復(fù)到大戰(zhàn)前的狀態(tài) 針對每一種角色,設(shè)計一個類來存儲該角色的狀態(tài) 【分析】 一個對象,就對應(yīng)一個保存對象狀態(tài)的對象, 這樣當我們游戲

    2024年02月13日
    瀏覽(57)
  • 設(shè)計模式——備忘錄模式

    備忘錄模式(Memento Pattern)是一種行為型設(shè)計模式,它在不破壞封裝的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣可以在需要時將對象恢復(fù)到先前的狀態(tài)。 發(fā)起人(Originator): 是擁有復(fù)雜內(nèi)部狀態(tài)的對象,它可以創(chuàng)建和恢復(fù)備忘錄。 備忘錄(M

    2024年01月19日
    瀏覽(26)
  • 《設(shè)計模式》備忘錄模式

    《設(shè)計模式》備忘錄模式

    定義 : 備忘錄模式又稱為快照模式或者令牌模式, 在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣可以在以后將對象恢復(fù)到原先保存的狀態(tài)。 屬性 行為型 模式。 備忘錄模式的角色組成 : Originator(發(fā)起人) :負責創(chuàng)建一個 Memento

    2024年02月06日
    瀏覽(32)
  • 【設(shè)計模式】備忘錄模式

    【設(shè)計模式】備忘錄模式

    主頁傳送門: ?? 傳送 ???????備忘錄(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日
    瀏覽(25)
  • 設(shè)計模式-備忘錄模式

    設(shè)計模式-備忘錄模式

    備忘錄模式(Memento Pattern)是計算機科學(xué)中的一種行為設(shè)計模式。它提供了一種在不破壞封裝性的前提下,捕獲和恢復(fù)對象內(nèi)部狀態(tài)的方法。這種模式主要用于在用戶需要回滾到對象的某個先前狀態(tài)時,能夠?qū)崿F(xiàn)狀態(tài)的還原。 在備忘錄模式中,主要涉及到三個角色: Origina

    2024年01月23日
    瀏覽(23)
  • 【備忘錄設(shè)計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    【備忘錄設(shè)計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    備忘錄模式(Memento Pattern)是一種結(jié)構(gòu)型設(shè)計模式。這種模式就是在不破壞封裝的條件下,將一個對象的狀態(tài)捕捉(Capture)住,并放在外部存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態(tài)。備忘錄模式常常與命令模式和迭代子模式一同使用。 備忘錄模式

    2023年04月20日
    瀏覽(26)
  • 【前端設(shè)計模式】之備忘錄模式

    【前端設(shè)計模式】之備忘錄模式

    設(shè)計模式是在軟件開發(fā)中經(jīng)過驗證的解決問題的方法。它們是從經(jīng)驗中總結(jié)出來的,可以幫助我們更好地組織和管理代碼,提高代碼的可維護性、可擴展性和可重用性。無論是前端還是后端開發(fā),設(shè)計模式都扮演著重要的角色。在本專欄中,我們將探索一些常見的前端設(shè)計模

    2024年02月05日
    瀏覽(30)
  • 設(shè)計模式(十八)備忘錄

    設(shè)計模式(十八)備忘錄

    在不破壞封裝的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣就可以在以后將對象恢復(fù)到原先保存的狀態(tài)。備忘錄模式是一種對象行為型模式,其別名為標記(Token)模式。 備忘錄模式的核心在于備忘錄類以及用于管理備忘錄的負責人類的設(shè)計,包

    2024年02月04日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包