備忘錄設計模式

2022-07-17 14:12:23 字數 1826 閱讀 1105

1.備忘錄設計模式

1.1什麼叫備忘錄模式?

memento模式也叫備忘錄模式,是行為模式之一,它的作用是在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。

並且在需要的時候(undo/rollback)恢復物件以前的狀態。

備忘錄模式(memento pattern)又叫做快照模式(snapshot pattern)或token模式,是gof的23種設計模式之一,屬於行為模式。

2. 備忘錄模式主要包含入下幾個角色:

originator: 原發器。負責建立乙個備忘錄,用以記錄當前物件的內部狀態,通過也可以使用它來利用備忘錄恢復內部狀態。同時原發器還可以根據需要決定memento儲存originator的那些內部狀態。

memento: 備忘錄。用於儲存originator的內部狀態,並且可以防止originator以外的物件訪問memento。在備忘錄memento中有兩個介面,其中caretaker只能看到備忘錄中的窄介面,它只能將備忘錄傳遞給其他物件。originator可以看到寬介面,允許它訪問返回到先前狀態的所有資料。

caretaker: 負責人。負責儲存好備忘錄,不能對備忘錄的內容進行操作和訪問,只能夠將備忘錄傳遞給其他物件。

在備忘錄模式中,最重要的就是備忘錄memento了。我們都是備忘錄中儲存的就是原發器的部分或者所有的狀態資訊,而這些狀態資訊是不能夠被其他物件所訪問了,也就是說我們是不可能在備忘錄之外的物件來儲存這些狀態資訊,如果暴漏了內部狀態資訊就違反了封裝的原則,故備忘錄是除了原發器外其他物件都是不可以訪問的。

所以為了實現備忘錄模式的封裝,我們需要對備忘錄的訪問做些控制:

對原發器:可以訪問備忘錄裡的所有資訊。

對負責人:不可以訪問備忘錄裡面的資料,但是他可以儲存備忘錄並且可以將備忘錄傳遞給其他物件。

其他物件:不可訪問也不可以儲存,它只負責接收從負責人那裡傳遞過來的備忘錄同時恢復原發器的狀態。

所以就備忘錄模式而言理想的情況就是只允許生成該備忘錄的那個原發器訪問備忘錄的內部狀態。

3.備忘錄模式的優缺點:

優點1、 給使用者提供了一種可以恢復狀態的機制。可以是使用者能夠比較方便地回到某個歷史的狀態。

2、 實現了資訊的封裝。使得使用者不需要關心狀態的儲存細節。

缺點消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

4.模式試用場景

1、 需要儲存乙個物件在某乙個時刻的狀態或部分狀態。

2、 如果用乙個介面來讓其他物件得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性,乙個物件不希望外界直接訪問其內部狀態,通過負責人可以間接訪問其內部狀態。

5.模式總結

1、 備忘錄模式可以實現在不破壞封裝的前提下,捕獲乙個類的內部狀態,並且在該物件之外儲存該物件的狀態,保證該物件能夠恢復到歷史的某個狀態。

2、 備忘錄模式實現了內部狀態的封裝,除了建立它的原發器之外其他物件都不能夠訪問它。

3、 備忘錄模式會占用較多的記憶體,消耗資源。

角色類

設計模式 備忘錄

設計模式 備忘錄 備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。效果 這個需要配合fastcoder使用,請自行到github上去搜尋原始碼fastcoder原始碼 原始碼 model.h 與 model.m memen...

設計模式 備忘錄

設計模式 備忘錄 備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。效果 這個需要配合fastcoder使用,請自行到github上去搜尋原始碼fastcoder原始碼 原始碼 model.h 與 model.m model...

設計模式 備忘錄模式

錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...