年少之時,酷愛單機,無奈技術不成,命途多舛,幸虧有讀/存檔之功能,才有幸通關。今日看到此設計模式,感觸良多,故列為首發。
不知道大家是否看到星爺的一部經典之作——《大話西遊》。
電影描繪了孫悟空,唐僧,紫霞仙子,白晶晶,牛魔王500多年的愛恨情仇,諸種事端。每次重溫一遍電影,都會有不同的感受。其中,一件寶物在這個電影中起著穿針引線的作用,那就是——月光寶盒。
月光寶盒,能夠穿越時空,回到過去的時光彌補遺憾,真不愧寶物之名。但寶物雖好,卻不能遂人意,回到我們想要去的時光。在《大話西遊之月光寶盒》中,每一次穿越都差強人意,最後一次穿越更是開了個大玩笑,也正因為如此,電影情節才會如此精彩。
我要分享的這篇設計模式——備忘錄模式就是公升級版的「月光寶盒」,能夠讓我們回到我們想回的時光,不再追悔莫及。
備忘錄模式是一種軟體設計模式:在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。
自我理解,根據圖示:
客戶端觸發時間,將資料傳送到備忘錄。
備忘錄進行儲存並命名。
將備忘錄存放到備忘錄集,即管理者。
客戶端恢復存檔,讀取備忘錄集即可。
有時一些發起人物件的內部資訊必須儲存在發起人物件以外的地方,但是必須要由發起人物件自己讀取,這時,使用備忘錄模式可以把
複雜的發起人內部資訊對其他的物件遮蔽起來,從而可以恰當地保持封裝的邊界。
模擬情景:我今天很不開心,表白別人被拒絕了,我想要把這件事記錄下來長個記性、留個回憶,但又不想被別人知道,只允許我自己回味。於是,我買了個帶加鎖功能的筆記本,將今天發生的東西記錄下來,密碼只有我知道。看到這篇日記,我覺得我可以回到過去,重新做一次選擇(yy而已,但設計模式真的可以讓你回去)。
備忘錄模式的缺點:
缺點一:資料設計不當。若備份的資料不足以讓情況改變,那麼我們的備份有可能無效。
例:關於真愛問題的大討論。好多人說,愛情最好的狀態是在合適的地點,合適的時間,遇到的合適的人。然而我覺得光遇到還不行,還得用合適的方法(在最好的狀態下,合適的方法才有意義)。
如果我們沒有用合適的方法導致表白失敗了,我們會想到用備忘錄模式。重新來一次。
假設我們用設計模式儲存好了合適的時間,合適的人,但是合適的地點沒有備份,那麼我們就回不到愛情最好的那個狀態了。既然回不到最好的狀態,那麼合適的方法也就無從談起,一次絕佳的時機就此錯過。
缺點二:需備份的資料大小不穩定。若需備份的資料過大,給使用者造成大的儲存負擔。
為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。
為了節約記憶體,可使用原型模式+備忘錄模式。
設計模式之備忘錄模式
機器 public class machine public void startplay disc.setluminance 60 disc.settime 0 disc.setvolume 80 public void stopplay disc.setluminance 70 disc.set...
設計模式之備忘錄模式
定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。備忘錄模式有三個角色 以儲存遊戲進度為例,退出遊戲前存檔,再進入遊戲就會顯示退出之前的狀態。示例 遊戲發起人類 public class game public state cr...
設計模式之 備忘錄模式
定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣就可以將該物件 恢復到原先儲存的狀態。很好理解,就像我們以前打通關遊戲一樣,打通某個關卡,就會備份一下,不然根本通不了關。備忘錄 負責儲存發起人物件的內部狀態,在需要的時候提供發起人需要的內部狀態。public c...