設計模式-備忘錄模式(C++)

備忘錄模式(Memento Pattern)是一種設計模式,用于在不破壞對象封裝的情況下,捕獲和保存對象的內部狀態,并在需要時恢復到之前的狀態。下面是一個簡單的 C++ 實現備忘錄模式的示例:

#include <iostream>
#include <string>// 原發器類
class Originator {
public:void setState(const std::string& state) {m_State = state;}std::string getState() const {return m_State;}void restoreState(Memento* memento) {m_State = memento->getState();}private:std::string m_State;
};// 備忘錄類
class Memento {
public:Memento(const std::string& state) : m_State(state) {}std::string getState() const {return m_State;}private:std::string m_State;
};// 管理者類
class CareTaker {
public:void saveMemento(Originator* originator) {m_Memento = new Memento(originator->getState());}Memento* getMemento() {return m_Memento;}void clearMemento() {delete m_Memento;m_Memento = nullptr;}private:Memento* m_Memento;
};int main() {// 創建原發器對象Originator originator;// 設置原發器的狀態originator.setState("State 1");// 創建管理者對象CareTaker careTaker;// 保存原發器的狀態careTaker.saveMemento(&originator);// 改變原發器的狀態originator.setState("State 2");std::cout << "Current state: " << originator.getState() << std::endl;// 恢復原發器的之前狀態careTaker.getMemento()->restoreState(&originator);std::cout << "Restored state: " << originator.getState() << std::endl;// 清理備忘錄careTaker.clearMemento();return 0;
}

在上述示例中,我們有三個類:Originator(原發器)、Memento(備忘錄)和?CareTaker(管理者)。

  • Originator?類具有設置狀態、獲取狀態和恢復狀態的方法。
  • Memento?類用于存儲原發器的狀態。
  • CareTaker?類負責保存和提供備忘錄。

在?main?函數中,我們首先創建了一個?Originator?對象并設置其狀態。然后,創建了一個?CareTaker?對象并保存了原發器的狀態。接下來,改變了原發器的狀態,并打印當前狀態。最后,通過恢復備忘錄,將原發器的狀態恢復到之前保存的狀態,并再次打印。

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

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

相關文章

2024理解這幾個安全漏洞,你也能做安全測試!

如今安全問題顯得越來越重要&#xff0c;一個大型的互聯網站點&#xff0c;你如果每天查看日志&#xff0c;會發現有很多嘗試攻擊性的腳本。 如果沒有&#xff0c;證明網站影響力還不夠大。信息一體化的背后深藏著各類安全隱患&#xff0c;例如由于開發人員的不嚴謹導致為Web應…

章節一、認識three.js與開發環境學習筆記01;

一、如何學習WEB可視化3D技術與課程內容演示&#xff1b; 1、項目案例&#xff1a; 政府有大量的新基建的項目&#xff1a;如數字孿生、智慧城市、智慧園區、智慧工廠、智慧消防等等都涉及了3d的可視化技術&#xff1b; 2、如何系統的學號WEB 3D可視化技術&#xff1f; three…

網絡安全學習筆記1

1.了解kali及安裝 vmware安裝&#xff0c;用戶名密碼均為kali 2.metasploit是什么 3.metasploit攻擊windows系統 在kali中打來終端 數據msfconsole 進入metasploit的控制終端界面 msf的使用法則&#xff1a; 1.使用模塊 2.配置模塊必選項 3.運行模塊 三步操作、實現對…

邏輯回歸與交叉熵--九五小龐

什么是邏輯回歸 線性回歸預測的是一個連續值&#xff0c;邏輯回歸給出的“是”和“否”的回答 Singmoid sigmoid函數是一個概率分布函數&#xff0c;給定某個輸入&#xff0c;它將輸出為一個概率值 邏輯回歸損失函數 平方差所懲罰的是與損失為同一數量級的情形&#xff0…

8、Redis-Jedis、Lettuce和一個Demo

目錄 一、Jedis 二、Lettuce 三、一個Demo Java集成Redis主要有3個方案&#xff1a;Jedis、Lettuce和Redisson。 其中&#xff0c;Jedis、Lettuce側重于單例Redis&#xff0c;而Redisson側重于分布式服務。 項目資源在文末 一、Jedis 1、創建SpringBoot項目 2、引入依賴 …

電商小程序10分類管理

目錄 1 分類數據源2 搭建功能3 創建變量讀取數據4 綁定數據總結 本篇我們介紹一下電商小程序的分類管理功能的開發&#xff0c;先看我們的原型圖&#xff1a; 在首頁我們是展示了四個分類的內容&#xff0c;采用上邊是圖標&#xff0c;下邊是文字的形式。使用低代碼開發&#…

【系統分析師】-需求工程

一、需求工程 需求工程分為需求開發和需求管理。 需求開發&#xff1a;需求獲取&#xff0c;需求分析&#xff0c;需求定義、需求驗證。 需求管理&#xff1a;變更控制、版本控制、需求跟蹤&#xff0c;需求狀態跟蹤。&#xff08;對需求基線的管理&#xff09; 1.1需求獲取…

MySQL:合并查詢語句

1、查詢表的數據 t_book表數據 SELECT * FROM db_book.t_book; t_booktype表數據 SELECT * FROM db_book.t_booktype; 提醒&#xff1a; 下面的查詢操作的數據來自上圖查詢表的數據 2. 使用 UNION 查詢結果合并&#xff0c;會去掉重復的數據 使用UNION關鍵字是&#xff0c;數…

社區店經營口號大揭秘:如何吸引更多顧客?

社區店的經營口號是吸引顧客的重要工具&#xff0c;一個好的口號能夠在短時間內傳達店鋪的特色和價值&#xff0c;并引起顧客的興趣。 作為一名開鮮奶吧5年的創業者&#xff0c;我將分享一些關于社區店經營口號的干貨&#xff0c;幫助你吸引更多的顧客。 1、突出獨特賣點&…

群控代理IP搭建教程:打造一流的網絡爬蟲

目錄 前言 一、什么是群控代理IP&#xff1f; 二、搭建群控代理IP的步驟 1. 獲取代理IP資源 2. 配置代理IP池 3. 選擇代理IP策略 4. 編寫代理IP設置代碼 5. 異常處理 三、總結 前言 群控代理IP是一種常用于網絡爬蟲的技術&#xff0c;通過使用多個代理IP實現并發請求…

優思學院|3步驟計算出Cpk|學習Minitab

在生產和質量管理中&#xff0c;準確了解和控制產品特性至關重要。一個關鍵的工具是Cpk值&#xff0c;它是衡量生產過程能力的重要指標。假設我們有一個產品特性的規格是5.080.02&#xff0c;通過收集和分析過程數據&#xff0c;我們可以計算出Cpk值&#xff0c;進而了解生產過…

CentOS 定時調度

文章目錄 一、場景說明二、腳本職責三、參數說明四、操作示例五、注意事項 一、場景說明 本自動化腳本旨在為提高研發、測試、運維快速部署應用環境而編寫。 腳本遵循拿來即用的原則快速完成 CentOS 系統各應用環境部署工作。 統一研發、測試、生產環境的部署模式、部署結構、…

Java中靈活使用Mockito

目錄 Java中靈活使用Mockito引言Mockito簡介基本用法實例演示使用場景和案例解決方案結語 Java中靈活使用Mockito 引言 Mockito是Java中常用的mock框架之一&#xff0c;用于進行單元測試時模擬對象的行為。本文將介紹Mockito的基本用法&#xff0c;并探討如何在實際項目中靈活…

AP8P059 PIR 人體感應太陽能 LED 燈控制芯片

概述 AP8P059 是一款集成低壓 LDO、光控、充電控制、過充保護、欠壓保護、PIR感應、延時為一體的人體感應太陽能 LED燈控制芯片&#xff0c;只需要很少的外接元件&#xff0c;適用于鋰電池供電的PIR人體感應LED燈具的應用。外置的一級帶通增益放大器便于客戶調整感應靈敏度&am…

QT MinGW64編譯vlc源碼

編譯環境搭建 參考文章《QT Mingw32/64編譯ffmpeg源碼生成32/64bit庫以及測試》&#xff0c;搭建msys64環境&#xff1b; 運行msys.exe,運行&#xff1a; pacman -S git subversion cvs automake autoconf libtool m4 make gettext pkg-config mingw-w64-i686-lua findutils …

docker配置數據默認存儲路徑graph已過時,新版本中是data-root

錯誤信息 我在修改/etc/docker/daemon.json文件中&#xff0c;添加存儲路徑graph字段。然后sudo systemctl restart docker包如下錯誤&#xff1a;使用journalctl -xeu docker.service錯誤信息&#xff0c;發現不能匹配graph字段。 原因 我的docker版本&#xff1a; 在doc…

mybatisplus整合flowable-ui-modeler報錯

1、問題 Description:file [/Users/xingyuwei/Documents/project/java/springboot_01/target/classes/com/xingyu/mapper/TemplateMapper.class] required a single bean, but 2 were found:- sqlSessionFactory: defined by method sqlSessionFactory in class path resource…

TypeScript08:在TS中使用模塊化

前言&#xff1a;tsconfig.json中的配置 一、前端領域中的模塊化標準 前端領域中的模塊化標準有&#xff1a; ES6、commonjs、amd、umd、system、esnext 二、 TS中如何書寫模塊化語句 TS 中&#xff0c;導入和導出模塊&#xff0c;統一使用 ES6 的模塊化標準。 myModule.ts &a…

Keil新版本安裝編譯器ARMCompiler 5.06

0x00 緣起 我手頭的項目在使用最新版本的編譯器后&#xff0c;燒錄后無法正常運行&#xff0c;故安裝5.06&#xff0c;測試后發現程序運行正常&#xff0c;以下為編譯器的安裝步驟。 0x01 解決方法 1. 下載編譯器安裝文件&#xff0c;可以去ARM官網下載&#xff0c;也可以使用我…

藍橋杯練習系統(算法訓練)ALGO-993 RP大冒險

資源限制 內存限制&#xff1a;64.0MB C/C時間限制&#xff1a;200ms Java時間限制&#xff1a;600ms Python時間限制&#xff1a;1.0s 問題描述 請盡情使用各種各樣的函數來測試你的RP吧~~~ 輸入格式 一個數N表示測點編號。 輸出格式 一個0~9的數。 樣例輸入 0 樣…