Memento 備忘錄模式

2021-06-22 21:15:40 字數 1572 閱讀 7847

定義

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。

案例

比如現在有乙個繪圖系統,我們在viewer裡面畫了一些圖形,但是在繪製的過程中可能畫出的影象不是想要的,這時候需要到正確的繪製狀態,這時候可以在每次繪製的時候儲存繪製的狀態資訊,但是要在不改變viewer的封裝性的前提下實現,有點困難,這時候就可以使用備忘錄模式。

乙個備忘錄memento是乙個物件,它儲存另乙個物件在某個瞬間的內部狀態,後者稱為備忘錄的原發器(originator):

memento類是用來儲存viewer的相關狀態:

class

memento

state

*state

()const

private

:

friend

class

viewer

;

memento

()private

:

state

*m_state

;};

viewer是memento的友元類,可以在需要的時刻建立memento物件,來儲存自身的狀態資訊:

class

viewer

;memento*viewer

::creatememento

()

void

setmemento

(memento

*memento

)

command類是用來繪製圖形,並可以回滾操作:

class

command

;voidcommand

::execute

()

void

command

::unexecute

()

}

效果保持封裝,避免了暴露由自身管理但必須儲存在自身之外的資料

簡化了原發器viewer,把管理儲存狀態資訊的重任交給了memento

備忘錄模式(Memento)

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

備忘錄模式(Memento)

1.目的 如果某個物件 gamerole 需要儲存其狀態 資料 為了不對外暴露資料,它可以自己封裝乙個類 memento 裡面包含其感興趣的資料,當需要儲存時,使用自己的資料生成乙個memento的物件,並將其儲存在caretaker中,當需要reload狀態時,從caretaker中取回memen...

Memento 備忘錄模式

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