Java設計模式之行為型模式(備忘錄模式)應用場景分析

最近看到一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站

一、用戶交互與編輯操作

  1. 文本編輯器撤銷/重做
    • 場景描述:用戶編輯文檔時,可通過Ctrl+Z撤銷誤操作,或通過Ctrl+Y重做。
    • 實現邏輯:每次編輯操作生成備忘錄并存入棧,撤銷時彈出棧頂狀態恢復。
    • 示例:
      // 發起人:文本框
      public class TextBox {private String text;public Memento save() { return new Memento(text); }public void restore(Memento memento) { this.text = memento.getState(); }
      }
      
  2. 圖形設計軟件的歷史記錄
    • 場景描述:設計師調整圖層或顏色時,可回退到任意歷史步驟。
    • 優化策略:使用雙向棧管理撤銷與重做,支持多級狀態回溯。

二、游戲與虛擬系統

  1. 游戲存檔與進度管理
    • 場景描述:玩家保存游戲進度(如角色屬性、關卡位置),退出后恢復。
    • 實現示例:
      // 發起人:游戲角色
      public class Gamer {private int level, coins;public GamerMemento save() { return new GamerMemento(level, coins); }public void restore(GamerMemento memento) { /* 恢復狀態 */ }
      }
      
    • 擴展應用:支持多存檔槽,每個槽獨立存儲不同時間點的狀態。
  2. 虛擬機快照與系統恢復
    • 場景描述:VMware拍攝系統快照后,可回退到特定時間點的內存與磁盤狀態。
    • 技術結合:常與序列化技術配合,持久化保存大規模狀態。

三、數據一致性與事務管理

  1. 數據庫事務回滾
    • 場景描述:事務執行失敗時,回滾到操作前的狀態,保證數據原子性。
    • 實現機制:事務開始前生成數據快照,異常時通過備忘錄恢復原始值。
  2. 金融交易與訂單恢復
    • 場景描述:支付系統中,若轉賬失敗則回滾賬戶余額至初始狀態。
    • 優勢:避免直接暴露賬戶細節,增強安全性。

四、分布式系統與狀態緩存

  1. 微服務狀態容錯
    • 場景描述:節點故障時,從備忘錄恢復會話或緩存數據。
    • 優化方案:結合Redis等分布式存儲,實現跨節點狀態共享。
  2. 緩存預熱與快速啟動
    • 場景描述:系統重啟時加載歷史狀態快照,減少冷啟動耗時。

五、開發與測試支持

  1. 單元測試環境隔離
    • 場景描述:測試前保存對象初始狀態,確保每次測試獨立性。
    • 示例:
      @BeforeEach
      void setup() {initialState = new Memento(initialData);
      }
      
  2. 調試與歷史審計
    • 場景描述:記錄對象生命周期內的狀態變化,輔助問題排查。

六、日常工具與用戶體驗

  1. 瀏覽器歷史記錄
    • 場景描述:后退鍵實現頁面狀態回退,依賴備忘錄管理URL與DOM狀態。
  2. IDE操作回滾
    • 場景描述:IntelliJ IDEA中撤銷代碼修改,避免誤操作丟失代碼。

場景選擇與權衡

適用場景特征典型應用注意事項
高頻狀態變更文本編輯、圖形設計限制備忘錄數量,避免內存溢出
需要強一致性數據庫事務、金融系統結合鎖機制防止并發沖突
復雜狀態恢復游戲存檔、虛擬機快照使用序列化持久化狀態
分布式環境微服務狀態緩存結合分布式存儲優化性能

總結

備忘錄模式通過狀態快照與封裝隔離,為撤銷、回滾、容錯等場景提供了非破壞性的解決方案。其核心價值在于平衡功能靈活性與系統安全性,尤其適用于需要“時間回溯”能力的復雜系統。實際應用中需根據場景特性優化存儲策略(如增量保存、LRU淘汰),以降低資源消耗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89899.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5.Java的4個權限修飾符

1.private(私有訪問權限)最嚴格的訪問修飾符,它限定被修飾的成員僅能在聲明它的當前類內部訪問。其他任何外部類都無法直接訪問該成員。作用:強制封裝,確保類內部實現細節的隱藏性和數據安全性2.默認權限(包…

Linux入門介紹

目錄 一、環境 二、Linux發展歷史 1、計算機 2、操作系統 四、認識Linux的 內核版本名稱 一、環境 一般是Centos 7 Ubuntu 20.04 / 22.04 前者已經停止更新與維護,但很多公司還在使用前者 二、Linux發展歷史 1、計算機 1945年 2.14---埃尼阿克---軍事用處&…

spring boot2升級boot3

spring boot2升級boot3 整體流程如下 1、借助于開源的自動化代碼重構工具OpenRewrite,快速地進行代碼重構等 2、相關坐標升級更改 3、配置文件屬性更改 4、打包、構建與運行驗證 1. 前期準備工作第一步:確保升級之前項目是可編譯運行的第二步&#xff1a…

mac終端設置代理

在Mac上配置終端走代理,需設置終端(如zsh或bash)使用HTTP/HTTPS/SOCKS代理,以便命令行工具(如curl、git、npm)通過代理訪問網絡。以下是詳細步驟,適用于macOS 10.15及以上版本。 前提條件 代理服…

VSTO Excel中打開WinForm.ShowDialog()后,如果要使用當前的wb.Application在后臺操作其他Excel文件(保持隱藏狀態)

在VSTO Excel中打開WinForm.ShowDialog()后,如果要使用當前的wb.Application在后臺操作其他Excel文件(保持隱藏狀態),可以通過以下幾種方式實現: 方法一:設置Application屬性控制可見性 // 在WinForm中獲取…

【網絡安全】DDOS攻擊

如果文章不足還請各位師傅批評指正!你有沒有過這種經歷:雙 11 搶券時頁面卡成幻燈片,游戲團戰突然全員掉線,刷視頻時進度條永遠轉圈圈?除了 “網渣”,可能還有個更糟的原因 —— 你正被 DDoS 攻擊 “堵門”…

第9天 | openGauss中一個表空間可以存儲多個數據庫

接著昨天繼續學習openGauss,今天是第9天了。今天學習內容是o一個數據庫可以存儲在多個表空間中。 老規矩,先登陸墨天輪為我準備的實訓實驗室 rootmodb:~# su - omm ommmodb:~$ gsql -r作業要求 1.創建表空間newtbs1 omm# CREATE TABLESPACE newtbs1 RELATIVE LOCATI…

H3C路由器模擬PPPOE撥號

拓撲簡圖 效果圖 PPPoE服務器端腳本 1. 基礎配置 system-view sysname PPPoE-Server # 可選,設置設備名稱2. 創建本地用戶(認證賬號)? local-user pppuser class network # 創建網絡類用戶 password simple 123456 # 設置密碼(PAP/CHAP共用) service-type ppp #

Github Actions Workflows 上傳 Dropbox

一、注冊 訪問 https://www.dropbox.com/register選擇 "個人" 如果想免費使用,一定要選擇 “繼續使用2GB的Dropbox Basic 套餐”,如下: 二、在 Dropbox 中 創建app 需要去注冊的郵箱中驗證一下郵箱.訪問 https://www.dropbox.com…

生產管理系統實現生產全過程可視化

隨著現代工業的不斷發展,智能制造、數字化轉型已成為企業提高競爭力的重要途徑。生產管理作為企業運營的核心環節,直接關系到產品質量、生產效率以及成本控制。傳統的生產管理方式大多依賴手工記錄和經驗管理,存在信息滯后、數據不一致、響應…

CSS實現背景色下移10px

眾所周知,背景顏色是不能移動的,通常是填充滿當前容器。 不過可以想想其它辦法。。 ?? 利用css3的線性屬性linear,在垂直方向向下推要移動的距離設成透明顏色,能在視覺上巧妙實現下移的效果。 .title {height: 20px;background: linear-gradient(to bottom,rgba(255, …

訪問 gitlab 跳轉 0.0.0.0

1、檢查防火墻是否關閉2、檢查服務器端口是否被占用3、檢查服務器是否對外開放80端口(gitlab 默認使用80端口)以阿里云服務器為例如果沒有SSH 、HTTP、HTTPS 開放,需要增加規則進行添加點擊確定即可。

Kotlin集合與空值

我們已經學習了 Kotlin 中的空安全(null safety)。在本節中,我們將討論如何處理集合中的空值(null),因為集合比其他數據類型更復雜。我們還將討論如何處理可空元素時常用的便利方法。 集合與空值 可空集合和…

nextjs編程式跳轉

Next.js 中&#xff0c;你可以通過多種方式實現編程式導航&#xff08;即通過代碼而非 <Link> 組件跳轉頁面&#xff09;。以下是完整的實現方法&#xff1a; 1. 使用 useRouter Hook&#xff08;函數組件&#xff09; 這是最常用的方法&#xff0c;適用于函數組件&#…

Git Remote命令介紹:遠程倉庫管理

一、Git Remote 是什么 git remote主要用于管理遠程倉庫&#xff0c;可以輕松地與遠程倉庫進行交互&#xff0c;實現代碼的共享與同步 。 二、Git Remote 的作用 &#xff08;一&#xff09;連接橋梁 假設你正在參與一個大型的 Web 應用開發項目&#xff0c;團隊成員分布在…

Android開發中的11種行為型設計模式深度解析

在Android應用開發中&#xff0c;設計模式是解決特定問題的可重用方案&#xff0c;其中行為型設計模式尤其重要&#xff0c;它們專注于對象之間的通信和職責分配。本文將深入解析Android開發中最常用的11種行為型設計模式&#xff0c;每個模式都配有詳細的介紹和實際應用示例&a…

Python 模塊未找到?這樣解決“ModuleNotFoundError”

在 Python 開發中&#xff0c;遇到“ModuleNotFoundError”時&#xff0c;通常是因為 Python 解釋器無法找到你嘗試導入的模塊。這可能是由于多種原因導致的&#xff0c;比如模塊未安裝、路徑不正確、虛擬環境未激活等。今天&#xff0c;就讓我們一起探討如何解決“ModuleNotFo…

Numpy庫,矩陣形狀與維度操作

目錄 一.numpy庫簡介與安裝 numpy庫的安裝 二.numpy核心功能 1.矩陣處理 2.數學運算 三.數據的維度與屬性 1.維度管理 2.屬性方法 四.數據類型與存儲范圍 五.矩陣形狀與維度操作 六.數據升維與reshape()方法 一.numpy庫簡介與安裝 NumPy是Python中用于科學計算的核心…

圖論(2):最短路

最短路一、模板1. Floyd2. 01BFS3. SPFA4. Dijkstra&#xff08;弱化版&#xff09;5. Dijkstra&#xff08;優化版&#xff09;二、例題1. Floyd1.1 傳送門1.2 無向圖最小環1.3 災后重建1.4 飛豬2. 01BFS2.1 Kathiresan2.2 障礙路線2.3 奇妙的棋盤3. SPFA3.1 奶牛派對3.2 營救…

“融合進化,智領未來”電科金倉引領數字化轉型新紀元

一、融合進化 智領未來電科金倉2025產品發布會重磅開啟&#xff01; 7月15日&#xff0c;以“融合進化 智領未來”為主題的電科金倉2025產品發布會在北京舉辦。產品發布會上展示了四款代表未來數字化趨勢的創新性產品。這些產品不僅涵蓋了數據庫技術&#xff0c;還涉及到數據集…