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

《設(shè)計模式的藝術(shù)》筆記 - 備忘錄模式

這篇具有很好參考價值的文章主要介紹了《設(shè)計模式的藝術(shù)》筆記 - 備忘錄模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

介紹

? ? ? ? 備忘錄模式在不破壞封裝的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣可以在以后將對象恢復(fù)到原先保存的狀態(tài)。它是一種對象行為模式,別名為Token。

實現(xiàn)

myclass.h

//
// Created by yuwp on 2024/1/12.
//

#ifndef DESIGNPATTERNS_MYCLASS_H
#define DESIGNPATTERNS_MYCLASS_H

#include <iostream>
#include <unordered_map>
#include <atomic>
#include <vector>
#include <memory>

class Originator;
class Memento { // 備忘錄類
    friend Originator;  // 備忘錄只能由Originator創(chuàng)建,確保安全
private:
    Memento();
    Memento(Originator *o);
    void setState(const std::string &state);
    std::string &getState();
private:
    std::string m_state;
};

class Originator {  // 原發(fā)器類,需要保存狀態(tài)
public:
    Originator();

    std::shared_ptr<Memento> createMemento();

    void restoreMemento(const std::shared_ptr<Memento> &m);

    void setState(const std::string &state);

    std::string &getState();

private:
    std::string m_state;
};

class Caretaker {   // 負(fù)責(zé)人類,管理備忘錄
public:
    std::shared_ptr<Memento> &getMemento();
    void setMemento(std::shared_ptr<Memento> m);

private:
    std::shared_ptr<Memento> m_memento;
};

#endif //DESIGNPATTERNS_MYCLASS_H

myclass.cpp

//
// Created by yuwp on 2024/1/12.
//

#include "myclass.h"
#include <thread>
#include <unistd.h>
#include <sstream>

Memento::Memento(Originator *o) {
    m_state = o->getState();
}

void Memento::setState(const std::string &state) {
    m_state = state;
}

std::string& Memento::getState() {
    return m_state;
}

Originator::Originator() {

}

std::shared_ptr<Memento> Originator::createMemento() {
    std::shared_ptr<Memento> m(new Memento(this));
    return m;
}

void Originator::restoreMemento(const std::shared_ptr<Memento> &m) {
    setState(m->getState());
}

void Originator::setState(const std::string &state) {
    m_state = state;
}

std::string& Originator::getState() {
    return m_state;
}

void Caretaker::setMemento(std::shared_ptr<Memento> m) {
    m_memento = m;
}

std::shared_ptr<Memento>& Caretaker::getMemento() {
    return m_memento;
}

main.cpp

#include <iostream>
#include <mutex>
#include "myclass.h"

int main() {
    Originator *originator = new Originator();
    originator->setState("初始狀態(tài)");
    auto m0 = originator->createMemento();
    originator->setState("第一次狀態(tài)");
    auto m1 = originator->createMemento();
    originator->setState("第二次狀態(tài)");
    auto m2 = originator->createMemento();
    Caretaker *caretaker = new Caretaker();

    std::cout << "恢復(fù)狀態(tài)前:" << std::endl;
    std::cout << "\t" << originator->getState() << std::endl;

    std::cout << "第一次恢復(fù):" << std::endl;
    caretaker->setMemento(m2);
    originator->restoreMemento(caretaker->getMemento());
    std::cout << "\t" << originator->getState() << std::endl;

    std::cout << "第二次恢復(fù):" << std::endl;
    caretaker->setMemento(m1);
    originator->restoreMemento(caretaker->getMemento());
    std::cout << "\t" << originator->getState() << std::endl;

    std::cout << "第三次恢復(fù):" << std::endl;
    caretaker->setMemento(m0);
    originator->restoreMemento(caretaker->getMemento());
    std::cout << "\t" << originator->getState() << std::endl;

    delete originator;
    delete caretaker;

    return 0;
}

總結(jié)

優(yōu)點

? ? ? ? 1.?它提供了一種狀態(tài)恢復(fù)的實現(xiàn)機(jī)制,使得用戶可以方便地回到一個特定的歷史步驟。當(dāng)新的狀態(tài)無效或者存在問題時,可以使用暫時存儲起來的備忘錄將狀態(tài)復(fù)原。

? ? ? ? 2.?備忘錄實現(xiàn)了對信息的封裝。一個備忘錄對象是一種原發(fā)器對象狀態(tài)的表示,不會被其他代碼所改動。備忘錄保存了原發(fā)器的狀態(tài),采用列表、堆棧等集合來存儲備忘錄對象可以實現(xiàn)多次撤銷操作。

缺點

? ? ? ? 1.?資源消耗過大。如果需要保存的原發(fā)器類的成員變量太多,就不可避免地需要占用大量的存儲空間,每保存一次對象的狀態(tài)都需要消耗一定的系統(tǒng)資源。

適用場景

? ? ? ? 1.?保存一個對象在某一個時刻的全部狀態(tài)或部分狀態(tài),這樣以后需要時就能夠恢復(fù)到先前的狀態(tài),實現(xiàn)撤銷操作。

? ? ? ? 2.?防止外界對象破壞一個對象歷史狀態(tài)的封裝性,避免將對象歷史狀態(tài)的實現(xiàn)細(xì)節(jié)暴露給外界對象。

練習(xí)

略(參考實現(xiàn)部分)文章來源地址http://www.zghlxwxcb.cn/news/detail-821362.html

到了這里,關(guān)于《設(shè)計模式的藝術(shù)》筆記 - 備忘錄模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

    2024年01月23日
    瀏覽(23)
  • 【前端設(shè)計模式】之備忘錄模式

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

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

    2024年02月05日
    瀏覽(30)
  • 設(shè)計模式行為型——備忘錄模式

    設(shè)計模式行為型——備忘錄模式

    目錄 備忘錄模式的定義 備忘錄模式的實現(xiàn) 備忘錄模式角色 備忘錄模式類圖 備忘錄模式舉例 備忘錄模式代碼實現(xiàn) 備忘錄模式的特點 優(yōu)點 缺點 使用場景 注意事項 實際應(yīng)用 ????????備忘錄模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式(Token Pattern),屬

    2024年02月14日
    瀏覽(23)
  • Java設(shè)計模式-備忘錄模式

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

    一、概述 備忘錄模式提供了一種狀態(tài)恢復(fù)的實現(xiàn)機(jī)制,使得用戶可以方便地回到一個特定的歷史步驟,當(dāng)新的狀態(tài)無效或者存在問題時,可以使用暫時存儲起來的備忘錄將狀態(tài)復(fù)原,很多軟件都提供了撤銷(Undo)操作,如 Word、記事本、Photoshop、IDEA等軟件在編輯時按 Ctrl+Z

    2024年01月21日
    瀏覽(18)
  • 設(shè)計模式(十八)備忘錄

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

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

    2024年02月04日
    瀏覽(24)
  • C++ 設(shè)計模式之備忘錄模式

    C++ 設(shè)計模式之備忘錄模式

    【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com)) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】 ? ? ? ? -- 什么是備忘錄模式? (第17種模式) ???????? 備忘錄模式 (Memento Pattern)是?種 ?為型設(shè)計模式 ,它允許在不暴露對象實現(xiàn)的情況下捕獲對

    2024年01月20日
    瀏覽(17)
  • 03-JAVA設(shè)計模式-備忘錄模式

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

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

    2024年04月26日
    瀏覽(27)
  • 設(shè)計模式——備忘錄模式(Memento Pattern)

    類型: 行為型模式 目的: 保存一個對象的某個狀態(tài),以便在適當(dāng)?shù)臅r候恢復(fù)對象。 使用場景: 1、需要保存/恢復(fù)數(shù)據(jù)的相關(guān)狀態(tài)場景。 2、提供一個可回滾的操作。 2.1.1 定義副本類 2.1.2 定義對象 菜鳥的例子定義Originator 對象的同時,還提供saveStateToMemento、getStateFromMemento的

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

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

    2024年01月22日
    瀏覽(45)
  • 笨蛋學(xué)設(shè)計模式行為型模式-備忘錄模式【22】

    8.9.1概念 ? 備忘錄模式允許在不暴露對象實現(xiàn)細(xì)節(jié)的情況下捕獲和恢復(fù)對象的內(nèi)部狀態(tài)。通過將對象的狀態(tài)封裝在備忘錄對象中,并將備忘錄對象保存在一個管理者對象中,可以在需要時回滾到對象之前的狀態(tài)。 8.9.2場景 ? 在現(xiàn)代辦公場景中,備忘錄模式可以應(yīng)用于文檔編

    2024年01月25日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包