java 設計模式_行為型_13備忘錄模式

13.備忘錄模式

模式定義
備忘錄模式(Memento Pattern)模式的定義:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,以便以后當需要時能將該對象恢復到原先保存的狀態。該模式又叫快照模式,備忘錄模式屬于行為型模式。
模式解決的問題
備忘錄模式讓用戶回到之前的某個狀態,就像“后悔藥”一樣,穿越時空回到過去的某個狀態。
模式角色

  • 發起人(Originator)角色:記錄當前時刻的內部狀態信息,提供創建備忘錄和恢復備忘錄數據的功能,實現其他業務功能,它可以訪問備忘錄里的所有信息。
  • 備忘錄(Memento)角色:負責存儲發起人的內部狀態,在需要的時候提供這些內部狀態給發起人。
  • 管理者(Caretaker)角色:對備忘錄進行管理,提供保存與獲取備忘錄的功能,但其不能對備忘錄的內容進行訪問與修改。

一、備忘錄角色

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Memento {private String state;
}

二、發起人角色

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Originator {private String state;public Memento saveStateToMemento(){return new Memento(state);}public void getStateFromMemento(Memento memento){state = memento.getState();}
}

三、管理者

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Storage {private List<Memento> mementos = new ArrayList<Memento>();
}

四、測試類

public class MementoTest {public static void main(String[] args) {Originator originator = new Originator();Storage storage = new Storage();originator.setState("狀態:第1關");storage.getMementos().add(originator.saveStateToMemento());originator.setState("狀態:第2關");storage.getMementos().add(originator.saveStateToMemento());originator.setState("狀態:第3關");storage.getMementos().add(originator.saveStateToMemento());System.out.println("當前"+originator.getState());System.out.println("退回到第2關");originator.getStateFromMemento(storage.getMementos().get(1));System.out.println("當前"+originator.getState());}
}

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

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

相關文章

創建postgres數據庫失敗

異常&#xff1a; postgres# CREATE DATABASE deepflow_agent2; ERROR: source database "template1" is being accessed by other users DETAIL: There are 2 other sessions using the database 如何斷聯這兩個session 要解決 PostgreSQL 中因 template1 數據庫…

臥安機器人闖上市:深耕AI具身技術,“大疆教父”李澤湘再落子

撰稿|行星 來源|貝多財經 又一家機器人企業&#xff0c;現身港股資本市場。貝多財經了解到&#xff0c;臥安機器人&#xff08;深圳&#xff09;股份有限公司&#xff08;下稱“臥安機器人”&#xff09;于6月8日向港交所提交了上市申請&#xff0c;國泰君安國際、華泰國際為…

基于GNU Radio Companion搭建的AM信號實驗

目錄 實驗目的和要求 1、AM收發系統仿真和實際接收 調制過程 2、Lab 2.1實驗過程AM信號的產生 AM信號的表達式 調制深度的概念 3、Lab2.2 AM信號的解調 4、Lab2.3 實際用RTLSDR接收一個ISM(912MHz)頻率的AM信號,信號的AM調制為音頻為48KHz的音樂信號 實驗目的和要求 …

【go】(僅思路)使用go實現一款簡單的關系型數據庫gosql

文章目錄 背景給navicate回復版本號建立連接數據庫list新建數據庫刪除數據庫刪除表查詢表數據總結roadmapnavicate連接適配 背景 使用go很容易編譯出一個二進制文件&#xff0c;已經有人用純go實現了sqlite3的驅動&#xff08;go get github.com/glebarez/sqlite&#xff09;&…

echarts開發 | 數據可視化 -- 第二篇 echart進階配置項學習

文章目錄 一、數據標記(markLine、markPoint)1.1 markLine&#xff08;標記線&#xff09;1.2 markPoint&#xff08;標記點&#xff09; 一、數據標記(markLine、markPoint) 支持兩類標記方式 markLine 和 markPoint 分別用于標示趨勢線和特定數據點&#xff0c;以加強數據表…

Kafka數據寫入流程源碼深度剖析(Broker篇)

在Kafka數據寫入流程中&#xff0c;Broker端負責接收客戶端發送的消息&#xff0c;并將其持久化存儲&#xff0c;是整個流程的關鍵環節。本文將深入Kafka Broker的源碼&#xff0c;詳細解析消息接收、處理和存儲的具體實現。 一、網絡請求接收與解析 Broker通過Processor線程…

名稱 深度學習(監督學習) Iteration 一次 mini-batch 前向+反向傳播更新 Epoch 所有數據集訓練一遍。這兩個概念不一樣嗎?

你的問題非常專業&#xff0c;確實容易混淆&#xff0c;下面我用科研術語 通俗比喻來清晰地區分&#xff1a; ? 簡明對照表&#xff1a;Iteration vs. Epoch&#xff08;在監督學習中&#xff09; 名稱專業術語解釋通俗理解是否屬于監督學習&#xff08;深度學習&#xff09…

Blender 模型下載

1.CGModel網站 https://www.cgmodel.com/ 免費模型數量多&#xff0c;國風類題材的模型多&#xff0c;中文搜索方便 2.Blender官網 3.3d溜溜網 https://3d.3d66.com/ 4.free3d.com free3d.com

Spring涉及的設計模式以及實際使用場景(含代碼)

Spring涉及的設計模式以及實際使用場景(含代碼) 1.工廠模式&#xff08;Factory Pattern&#xff09; 作用: 隱藏對象創建的細節&#xff0c;通過工廠類統一管理對象的實例化。 場景&#xff1a;Spring的BeanFactory和ApplicationContext是工廠模式的典型實現。 // 通過App…

ROM 只讀存儲器 隨機存取

ROM&#xff08;Read-Only Memory&#xff0c;只讀存儲器&#xff09;的存取方式為&#xff1a; ? 隨機存取方式&#xff08;Random Access&#xff09; 盡管“ROM”強調的是“只讀”&#xff0c;它的數據訪問方式與 RAM 類似&#xff0c;都是隨機存取。 &#x1f50d; 解釋如…

opensuse解決微信無法登錄的問題

思路啟發 https://forum.suse.org.cn/t/topic/17183/2 實際解決 https://forum.suse.org.cn/t/topic/17204/5 解決方法 先安裝 sudo zypper install execstackcd /opt/wechatsudo bash -c execstack -c ./*.so

Adixen ASM380 氦氣檢漏儀 阿爾卡特Mobile high performance helium leak detector

Adixen ASM380 氦氣檢漏儀 阿爾卡特Mobile high performance helium leak detector

堆的自動管理

由于程序員必須編寫出到分配和釋放存儲器的明確的調用&#xff0c;所以用m a l l o c和f r e e完成指針的動態分配和重新分配是管理堆的手工( m a n u a l )方法。相反地&#xff0c;運行時棧則是由調用序列自動地( a u t o m a t i c a l l y )管理。在一種需要完全動態的運行…

智能出入庫管理系統:自動化管控平臺

部隊裝備庫室智能管控系統是集智能化、集成化、網絡化于一體的綜合管理系統&#xff0c;由智慧營區庫室綜合管控平臺、出入口控制子系統、智能QD柜子系統、裝備物資管理子系統、視頻監控系統、入侵報警子系統、環境監測子系統等七大核心子系統構成。各子系統通過數據自動交互&a…

歸并排序:高效分治的藝術

歸并排序(Merge Sort)原理詳解 歸并排序是一種基于分治法(Divide and Conquer)的高效排序算法,由馮諾依曼于1945年提出。它的核心思想是將大問題分解為小問題,解決小問題后再合并結果。 核心原理 1. 分治策略(Divide and Conquer) 分(Divide):將無序數組遞歸地拆…

知識庫建設方案有哪些?全面解析

知識庫建設方案主要包括本地部署方案、云端在線方案、混合部署方案。其中&#xff0c;云端在線方案以其靈活性、實時更新能力和低維護成本&#xff0c;逐漸成為大多數企業的首選方案。云端在線方案可隨時隨地提供實時更新的知識內容&#xff0c;確保企業員工和客戶始終獲得最新…

政務大廳智能引導系統:基于數字孿生的技術架構與實踐

本文面向政務信息化開發者、系統集成工程師、智能導視領域技術人員。解析政務大廳智能引導系統的技術實現路徑&#xff0c;提供從定位導航到數據驅動的技術方案&#xff0c;助力解決傳統導視系統效率低下、體驗不佳的技術痛點。 一、技術架構全景&#xff1a;從物理空間到數字映…

java設計模式[2]之創建型模式

文章目錄 一 創建型模式1.1 單例模式的設計與實現1.1.1 餓漢式模式1.1.2 懶漢式單例模式1.1.3 懶漢式單例模式完善1.1.4 雙重檢測鎖式1.1.4.1 volatile關鍵字1.1.4.2 在雙重檢查鎖定中的作用 1.1.5 靜態內部類式單例模式1.1.6 枚舉式單例模式1.1.7 反射暴力破解解決方案1.1.8 序…

PHP設計模式實戰:構建高性能API服務

在前一篇電子商務系統設計的基礎上,我們將深入探討如何運用設計模式構建高性能、可擴展的API服務。現代Web應用越來越依賴API作為前后端分離架構的核心,良好的API設計對系統性能和維護性至關重要。 倉庫模式實現數據訪問層 倉庫模式(Repository Pattern)可以抽象數據訪問邏…

ComfyUI Flux.1 ACE++ 圖像編輯原理詳解

關注不迷路&#xff0c;點贊走好運&#xff01;&#xff01;&#xff01; ComfyUI Flux.1 ACE 圖像編輯原理詳解 ——從“拼圖游戲”到“魔法畫筆”的技術革命 目錄 ACE 的核心思想&#xff1a;用“指令”指揮圖像生成 1.1 什么是上下文感知內容填充&#xff1f;1.2 條件單元&…