備忘錄模式

2021-08-30 11:28:51 字數 2216 閱讀 9342

大家有沒有看過尼古拉斯·凱奇主演的《next》(中文譯名為《預見未來》)?尼古拉斯

·凱奇飾演乙個可以預視並且扭轉未來的人,其中有乙個情節很是讓人心動——男女主角見

面的那段情節:cris johnson(尼古拉斯·凱奇飾演)坐在咖啡吧台前,看著離自己近在咫尺

的callie ferris(朱莉安·摩爾飾演),計畫著怎麼認識這個命中註定的女人,看cris johnson

如何利用自己的特異功能:

● cris johnson端著一杯咖啡走過去,說「你好,可以認識你嗎?」被拒絕,恢復到坐在咖

啡吧台前的狀態。

● 走過去詢問是否可以搭車,被拒絕,恢復原狀。

● 幫助解決困境,被拒絕,恢復原狀。

● 採用嬉皮士的方式解決困境,被拒絕,恢復原狀。

● 幫助解決困境,被打傷,裝可憐,callie ferris憐惜,於是乎相識了。

看看這是一件多麼幸福的事情,追求乙個女生可以多次反覆地實驗,直到找到好的方法

和途徑為止,這估計是大多數男生都希望獲得的特異功能。想想看,看到乙個心儀的女生,

我們若反覆嘗試,總會有乙個方法打動她的,多美好的一件事。現在我們還得回到現實生

活,我們來分析一下類似事情的經過:

● 複製乙個當前狀態,保留下來,這個狀態就是等會兒搭訕女孩子失敗後要恢復的狀

態,你不恢復原始狀態,這不就露餡兒了嗎?

● 每次試探性嘗試失敗後,都必須恢復到這個原始狀態。

● n次試探總有一次成功吧,成功以後即可走成功路線。

想想看,我們這裡的場景中最重要的是哪一塊?對的,是原始狀態的保留和恢復這塊,

如何保留乙個原始,如何恢復乙個原始狀態才是最重要的,那想想看,我們應該怎麼實現

呢?很簡單呀,我們可以定義乙個中間變數,保留這個原始狀態。我們先看看類圖,如圖

}boy類封裝不夠,那我們應該如何修改呢?如果在boy類中

再增加乙個方法或者其他的內部類來儲存這個狀態,則對單一職責原則是一種破壞,想想看

單一職責原則是怎麼說的?乙個類的職責應該是單一的,boy類本身的職責是追求女孩子,

而保留和恢復原始狀態則應該由另外乙個類來承擔,那我們把這個類取名就叫做備忘錄,這

和大家經常在桌面上貼的那個便簽是乙個概念,分析到這裡我們的思路已經非常清楚了,我

們來修改一下類圖,如圖

}備忘錄模式(memento pattern)提供了一種彌補真實世界缺陷的方法,讓「後悔藥」在程

序的世界中真實可行,其定義如下:

without violating encapsulation,capture and externalize an object's internal state so that the

object can be restored to this state later.(在不破壞封裝性的前提下,捕獲乙個物件的內部狀

態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。)

備忘錄模式

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

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...