Java學習 設計模式 備忘錄模式

2021-09-12 17:23:04 字數 1843 閱讀 5627

備忘錄模式儲存乙個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。

優點:1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。 2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。

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

類似遊戲中的回檔,將可能回退的屬性封裝進乙個類中,備忘錄模式是備份指定類的某一時刻狀態,需要回退時,將當前物件還原成備份時的狀態。

1. 定義乙個備份類實現cloneable介面(在備份時直接轉殖物件)

包含乙個型別為本類的屬性,乙個代表需要備份的屬性(只寫乙個是為了測試方便),

提供get和set方法,

重寫clone方法實現物件的轉殖

2. 建立乙個備忘錄模式類,包含乙個備份類的屬性,提供改寫後的get和set方法(set需要對物件進行轉殖。避免直接引用物件)

3. 建立乙個遊戲類,完成對備份類的屬性的修改,並實現備份和還原功能

2. 測試,先建立乙個類物件,設定好要備份的值,備份好當前物件,修改屬性,接著再還原回去。

package practices.mode.memento_pattern;

// 1. 新建乙個屬性類,這裡假設備份遊戲中的金錢

public

class

status

implements

cloneable

public

intgetmoney()

public

void

setmoney

(int money)

@override

protected status clone()

catch

(clonenotsupportedexception e)

st.money =

this

.money;

return st;

}}

package practices.mode.memento_pattern;

// 2. 建立乙個備忘錄類來記錄備份類的狀態

public

class

memento

public status getstatus()

public

void

setstatus

(status status)

}

package practices.mode.memento_pattern;

// 3. 建立乙個遊戲來實現屬性的變化

public

class

game

public

void

getmoney

(int mm)

public

void

losemoney

(int lm)

public

void

creatememento()

public

void

loadmemento()

}

package practices.mode.memento_pattern;

// 4. 測試

public

class

test_main

}

這個模式理解之後隔了好久才寫,導致理解可能出現偏差,有可能**錯誤,但是理念應該差不多。

java設計模式 備忘錄模式

備忘錄模式 定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。originator可以根據...

設計模式學習 備忘錄模式

備忘錄模式 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到原先儲存的狀態 originator 發起人,負責建立乙個備忘錄memento,用以記錄當前時刻他的內部狀態,並可使用備忘錄恢復內部狀態,originator可根據需要覺得mement...

設計模式學習 備忘錄模式

備忘錄模式,在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。把要儲存的細節給封裝在了memento中了,哪一天要更改儲存的細節也不用影響客戶端了。應用 memento模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者...