備忘錄模式(Memento)

2021-10-07 09:26:03 字數 1488 閱讀 9637

uml類圖:

備忘錄模式:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以利用該儲存的狀態實施恢復操作。

**:

class

originator

public

void

setstate

(string state)

public memento creatememento()

public

void

setmemento

(memento memento)

public

void

show()

}class

memento

public string getstate()

public

void

setstate

(string state)

}class

caretaker

public

void

setmemento

(memento memento)

}public

class

main

}

輸出結果:

state=on

state=off

state=on

優點:

● 有時一些發起人物件的內部資訊必須儲存在發起人物件以外的地方,但是必須要由發起人物件自己讀取,這時,使用備忘錄模式可以把複雜的發起人內部資訊對其他的物件遮蔽起來,從而可以恰當地保持封裝的邊界。

● 本模式簡化了發起人類。發起人不再需要管理和儲存其內部狀態的乙個個版本,客戶端可以自行管理他們所需要的這些狀態的版本。

● 當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時儲存起來的備忘錄將狀態復原。

缺點:

● 如果發起人角色的狀態需要完整地儲存到備忘錄物件中,那麼在資源消耗上面備忘錄物件會很大。

● 當管理者角色將乙個備忘錄儲存起來的時候,管理者可能並不知道這個狀態會占用多大的儲存空間,從而無法提醒使用者乙個操作是否很大。

適用場合:

如果必須儲存乙個物件在某乙個時刻的全部或者部分狀態,方便在以後需要的時侯,可以把該物件恢復到先前的狀態,可以使用備忘錄模式

本質:儲存和恢復內部狀態

備忘錄模式和原型模式可以組合使用,在原發器物件(發起人物件)建立備忘錄物件的時候,如果原發器物件中全部或者大部分的狀態都需要儲存,乙個簡潔的方式就是直接轉殖乙個原發器物件。也就是說,這個時候備忘錄物件裡面存放的是乙個原發器物件的例項。

備忘錄模式(Memento)

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

Memento 備忘錄模式

定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。案例 比如現在有乙個繪圖系統,我們在viewer裡面畫了一些圖形,但是在繪製的過程中可能畫出的影象不是想要的,這時候需要到正確的繪製狀態,這時候可以在每次繪製的時候儲存繪製的狀...

備忘錄模式(Memento)

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