C 設計模式實現 備忘錄 Memento 模式

2021-09-07 16:28:31 字數 1523 閱讀 5405

一. 備忘錄模式

定義:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態。並在該物件之外儲存這個狀態。

這樣以後就可將該物件恢復到原先儲存的狀態。

結構圖:

使用範圍:

memento 模式比較適用於功能比較複雜的。但須要維護或記錄屬性歷史的類,或者須要儲存的屬性僅僅是眾多屬性中的一小部分時。originator 能夠依據儲存的 memento 資訊還原到前一狀態。

**:

[cpp]view plain

copy

//備忘錄類

//負責儲存 originator 物件的內部狀態

class

memento   

memento(const

string& sdt)  

void

setstate(

const

string& sdt)  

string getstate()  

private

:  string _sdt;  

};  

//原始類

//負責建立備忘錄

class

originator   

originator(const

string& sdt)  

//建立備忘錄,將當前資訊儲存在乙個備忘錄物件中

memento* creatememento()  

//恢復備忘錄,將備忘錄物件上的資訊恢復出來

void

restoretomemento(memento* mt)  

string getstate()  

void

setstate(

const

string& sdt)  

void

printstate()  

private

:   

string _sdt;  

memento* _mt;   

};  

//測試**

intmain(

intargc,

char

* ar**)     

二. 說明

1. memento 負責儲存 originator 物件的內部狀態,並可防止 originator 以外的其他物件訪問備忘錄(詳細實現方法,就是讓其全部方法都為私有的)。

2. memento 宣告 originator 為它的友元類,這樣 originator 就能夠訪問它的全部函式。即對 originator 是開放的。

設計模式 備忘錄模式 C 實現

備忘錄模式 memento pattern 儲存物件的某個狀態,以便在適當的時候恢復。備忘錄模式屬於行為型模式。意圖 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。解決問題備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在...

二十三種設計模式19 備忘錄模式(Memento)

主要目的是儲存乙個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些,通俗的講下 假設有原始類a,a中有各種屬性,a可以決定需要備份的屬性,備忘錄類b是用來儲存a的一些內部狀態,類c呢,就是乙個用來儲存備忘錄的,且只能儲存,不能修改等操作。做個圖來分析一下 測試類 1.public...

C 設計模式 備忘錄模式

應用 ifndef caretaker h define caretaker h include memento.h class caretaker void setmemento memento memento 備忘錄物件 private memento memento endif caretak...