備忘錄模式儲存乙個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。
優點: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模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者...