如何讓孩子愛上設(shè)計模式 ——18.備忘錄模式(Memento Pattern)

標(biāo)簽: 設(shè)計模式初涉


描述性文字

本節(jié)講解的是行為型設(shè)計模式種的:備忘錄模式(Memento Pattern),說到這個模式
想起以前用GBA玩寵物小精靈綠寶石的抓裂空座的時候,雖然有大師球,但是基本都
會想著用其他精靈球把神獸抓住,畢竟大師球沒得賣,所以會在在打之前存檔,
然后開始捕捉,打殘血,各種丟球,很多時候丟到裂空座技能都沒了只能掙扎,
然后死了,這個時候就肯定要去讀檔,然后繼續(xù)重復(fù)這個捕捉神獸的過程,
爭取盡量少的球,抓到神獸(PS:曾經(jīng)用了N個普通精靈球就把裂空座抓了,2333,
高興了一整天~)

這種:

需要把保存一個對象在某個時刻的狀態(tài)或部分狀態(tài),在未來某個時段需要時,
將其還原到原來記錄狀態(tài)的模式,就是 備忘錄模式

接下來說下模式的概念相關(guān)。


概念相關(guān)

定義

在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外的保存
這個狀態(tài)。

三個角色

  • Originator發(fā)起人,創(chuàng)建一個備忘錄,可以記錄,恢復(fù)自身的內(nèi)部狀態(tài),還可根據(jù)
    需求決定存儲那些內(nèi)部狀態(tài)。
  • Memento備忘錄,存儲發(fā)起人角色的內(nèi)部狀態(tài),并防止外部對象訪問備忘錄。
  • Caretaker管理者,存儲備忘錄,不能對備忘錄內(nèi)容進行訪問,只能將其傳遞
    給其他對象。

UML類圖

使用場景

保存一個對象在某一個時刻的全部狀態(tài)或部分狀態(tài),這樣以后需要時它能夠恢復(fù)到先前
的狀態(tài),實現(xiàn)撤銷操作。防止外界對象破壞一個對象歷史狀態(tài)的封裝性。
如果有需要提供回滾操作的需求,使用備忘錄模式非常適合。

優(yōu)缺點

優(yōu)點

  • 1.更好的封裝性,不把發(fā)起人對象的內(nèi)部實現(xiàn)細節(jié)暴露給外部;
  • 2.簡化了發(fā)起人,把備忘錄對象保存到發(fā)起人對象之外,讓客戶來管理請求的狀態(tài);
  • 3.窄接口和寬接口,債基口保證了只有發(fā)起者才能訪問備忘錄對象的狀態(tài);

缺點

資源消耗過大,如果需要保存的原發(fā)器類的成員變量太多,就不可避免需要占用大量
的存儲空間,每保存一次對象的狀態(tài)都需要消耗一定的系統(tǒng)資源。


代碼示例

這里舉個簡單的RPG游戲的例子,存檔保存當(dāng)前血量,藍量,以及有用金幣。
想定義備忘錄類,即存檔的內(nèi)容

接著定義一個角色類(發(fā)起人角色),除了屬性定義,還有兩件關(guān)鍵的事
要做:定義保存方法,保存自身狀態(tài);定義恢復(fù)方法,傳入備忘錄對象,
自行回復(fù)需要回復(fù)的項。

再接著是備忘錄管理者類,只負(fù)責(zé)備忘錄對象的傳遞
PS:如果是多個存檔的,可以用一個集合存?zhèn)渫?/strong>,然后根據(jù)一個所以
來獲取對應(yīng)的備忘錄!

最后,客戶端調(diào)用

輸出結(jié)果

好的,代碼非常簡單,相信一看就懂了~


本節(jié)示例代碼:

https://github.com/coder-pig/DesignPatternsExample/tree/master/17.Memento%20Pattern


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 開發(fā)仿真系統(tǒng)## 考慮這樣一個仿真應(yīng)用,功能是:模擬運行針對某個具體問題的多個解決方案,記...
    七寸知架構(gòu)閱讀 2,249評論 1 50
  • 定義 備忘錄模式又叫做快照模式(Snapshot Pattern)或Token模式,是對象的行為模式。 備忘錄對象...
    步積閱讀 3,133評論 0 2
  • 面向?qū)ο蟮牧笤瓌t 單一職責(zé)原則 所謂職責(zé)是指類變化的原因。如果一個類有多于一個的動機被改變,那么這個類就具有多于...
    JxMY閱讀 1,029評論 1 3
  • 設(shè)計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,083評論 3 14
  • 因為工作和閱讀的積累,15年初就開始思考并關(guān)注時間管理,過更高效的人生的信息,16年恰好公司邀請日本管理顧問指導(dǎo),...
    sallyhu閱讀 223評論 0 1

友情鏈接更多精彩內(nèi)容