作者 薛之謙chj 轉(zhuǎn)載請(qǐng)注明出處
我的知乎:https://zhuanlan.zhihu.com/c_1229107265379897344
內(nèi)容簡(jiǎn)介:
定義:
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
在不破壞封裝的前提下封锉,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài)楚殿,并在對(duì)象之外保存這個(gè)狀態(tài)湃番。這樣以后就可將該對(duì)象恢復(fù)到原先保存的狀態(tài)婉烟。
簡(jiǎn)介:
備忘錄模式又稱為?快照模式(Snapshot Pattern)?或?Token模式榛了。
在軟件系統(tǒng)中回溺,備忘錄模式為我們提供一種 “后悔藥” 的機(jī)制沟蔑,它通過(guò)存儲(chǔ)系統(tǒng)各個(gè)歷史狀態(tài)的快照求类,使得我們可以在任一時(shí)刻將系統(tǒng)回滾到某一個(gè)歷史狀態(tài)累贤。
對(duì)于備忘錄模式來(lái)說(shuō)叠穆,比較貼切的現(xiàn)實(shí)場(chǎng)景應(yīng)該是游戲的存檔功能,通過(guò)將游戲當(dāng)前進(jìn)度存儲(chǔ)到本地文件系統(tǒng)或數(shù)據(jù)庫(kù)中臼膏,使得下次繼續(xù)游戲時(shí)硼被,玩家可以從之前的位置繼續(xù)進(jìn)行。
備忘錄模式本質(zhì):從發(fā)起人實(shí)體類(Originator)隔離存儲(chǔ)功能渗磅,降低實(shí)體類的職責(zé)嚷硫。同時(shí)由于存儲(chǔ)信息(Memento)獨(dú)立,且存儲(chǔ)信息的實(shí)體交由管理類(Caretaker)管理始鱼,則可以通過(guò)為管理類擴(kuò)展額外的功能對(duì)存儲(chǔ)信息進(jìn)行擴(kuò)展操作(比如增加歷史快照功能···)仔掸。
主要解決
存儲(chǔ)實(shí)體(Originator)狀態(tài),存儲(chǔ)歷史快照医清,回滾歷史狀態(tài)起暮。
優(yōu)缺點(diǎn):
優(yōu)點(diǎn)
簡(jiǎn)化發(fā)起人實(shí)體類(Originator)職責(zé),隔離狀態(tài)存儲(chǔ)與獲取会烙,實(shí)現(xiàn)了信息的封裝负懦,客戶端無(wú)需關(guān)心狀態(tài)的保存細(xì)節(jié);
提供狀態(tài)回滾功能柏腻;
缺點(diǎn)
消耗資源:如果需要保存的狀態(tài)過(guò)多時(shí)纸厉,每一次保存都會(huì)消耗很多內(nèi)存;
使用場(chǎng)景
需要保存歷史快照的場(chǎng)景五嫂;
希望在對(duì)象之外保存狀態(tài)颗品,且除了自己其他類對(duì)象無(wú)法訪問(wèn)狀態(tài)保存具體內(nèi)容;
具體實(shí)現(xiàn):
備忘錄模式(Memento)
主要目的是保存一個(gè)對(duì)象的某個(gè)狀態(tài),以便在適當(dāng)?shù)臅r(shí)候恢復(fù)對(duì)象抛猫,個(gè)人覺(jué)得叫備份模式更形象些,通俗的講下:假設(shè)有原始類A孩灯,A中有各種屬性闺金,A可以決定需要備份的屬性,備忘錄類B是用來(lái)存儲(chǔ)A的一些內(nèi)部狀態(tài)峰档,類C呢败匹,就是一個(gè)用來(lái)存儲(chǔ)備忘錄的,且只能存儲(chǔ)讥巡,不能修改等操作掀亩。做個(gè)圖來(lái)分析一下:
Original類是原始類,里面有需要保存的屬性value及創(chuàng)建一個(gè)備忘錄類欢顷,用來(lái)保存value值槽棍。Memento類是備忘錄類,Storage類是存儲(chǔ)備忘錄的類抬驴,持有Memento類的實(shí)例炼七,該模式很好理解。直接看源碼:
原始類:
備忘錄類:
存儲(chǔ)備忘錄的類:
測(cè)試類:
輸出:
初始化狀態(tài)為:egg
修改后的狀態(tài)為:niu
恢復(fù)后的狀態(tài)為:egg
簡(jiǎn)單描述下:新建原始類時(shí)布持,value被初始化為egg豌拙,后經(jīng)過(guò)修改,將value的值置為niu题暖,最后倒數(shù)第二行進(jìn)行恢復(fù)狀態(tài)按傅,結(jié)果成功恢復(fù)了。其實(shí)我覺(jué)得這個(gè)模式叫“備份-恢復(fù)”模式最形象胧卤。