設計模式 行為模式 備忘錄 C 描述

2021-08-19 23:42:56 字數 1383 閱讀 6141

second60 20180515

官方定義:在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。也可以將物件恢復到原先儲存的狀態。

也稱快照模式。

分析:1. 

originator: 發起人記錄當前時刻的內部狀態,負責建立和恢復備忘錄資料。

2. menento: 備忘錄,負責儲存發起人物件內部狀態

3. caretaker: 管理角色,對備忘錄進行管理,儲存和提供備忘錄

#include using namespace std;

// 備忘錄定義

// 用來記錄當時的狀態

class memento

string getstate()

void setstate(const string& state)

private:

string _state;};

// 發起者,即要備忘錄的物件

// 發起者可以建立備忘錄和恢復備忘錄

class originator

virtual ~originator(){}

void setstate(const string& state)

string getstate()

memento *creatememento()

void restorememento(memento *memento)

private:

string _state;

};// 備忘錄管理者

// 這裡只是管理乙個備忘錄

// 可以定義乙個容器來,來管理一批備忘狀態

class caretaker

void setmemento(memento* memento)

private:

memento *_memento;

};int _tmain(int argc, _tchar* argv)

1. 當發起人角色狀態改變時,可能狀態錯誤,能把錯誤的狀態還原回來

2. 備份的狀態無須發起人管理,交由管理者管理,邏輯解耦

1. 實際運用中,備忘錄都是多狀態的,多備份的,發起人角色狀態需要儲存到備忘錄物件中,需消耗大量資源。

1. 需儲存快照

2. 支援回滾的功能

3. 把快照資訊和本身分開,不改變原有封裝。

4. 遊戲進度存檔

5. 需要儲存恢復資料的相關狀態場景

備忘錄,在某些儲存恢復資料的場景,非常有用,但要一定的記憶體開銷。能在不改變封閉的條件下,新增備忘邏輯。用途沒那麼廣泛,但模式簡單,熟悉並運用到可運用場景。

設計模式 行為 備忘錄

pragma once ifndef memento h define memento h include typedef std string state class memento class originator 把memento 的介面函式都設定為私有的,而originator 是它的友元,...

行為型設計模式 備忘錄模式

在我們平時的開發工作中,很多場景需要我們備份和恢復,比如資料庫binlog日誌備份 mvcc多版本併發控制 瀏覽器的回退 chrome奔潰後重新開啟恢復之前的頁面。在gof 設計模式 定義如下 captures and externalizes an object s internal state ...

設計模式 行為型模式 備忘錄模式

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,以便以後當需要時能將該物件恢復到原先儲存的狀態。又叫快照模式。優點 缺點資源消耗大。如果要儲存的內部狀態資訊過多或者特別頻繁,將會占用比較大的記憶體資源。結構主要角色 類圖 實現 備忘錄 class memento todo...