設計模式入門:備忘錄模式 Memento Pattern

閱讀時間約 2 分鐘

你有沒有曾經正在玩一個遊戲,剛剛過了一個超難的關卡,但突然手滑點錯選項,整個進度被重置了?這時候你一定會希望有個「存檔」功能,能讓你回到之前的關卡。這正是備忘錄模式 Memento Pattern 想解決的問題。


備忘錄模式讓我們能夠保存某個物件的狀態,並在需要時還原這些狀態,像是一個「後悔藥」,讓系統能夠在不破壞原有結構的情況下,返回到某個時間點的狀態。


什麼是備忘錄模式?

備忘錄模式是一種行為型設計模式,用來保存物件的狀態,並允許將來在必要時還原它。就像是你在編輯檔案時,隨時可以保存進度並在需要時「復原」或「重做」那些修改。這種模式讓你可以放心地做出改變,因為隨時可以回到之前的狀態。


我們可以把它想成遊戲裡的存檔點。當你存檔後,可以繼續遊戲,遇到困難時還可以回到存檔點,不用從頭開始。備忘錄模式讓系統的狀態管理變得更加靈活和安全。


備忘錄模式的應用

一個常見的應用例子就是文字編輯器中的「復原」和「重做」功能。每次修改檔案的時候,編輯器會記錄當下的狀態,這樣在你需要取消變更時,可以恢復到之前的版本。這個過程不會破壞檔案的其他部分,還讓你可以安心編輯,隨時回到你覺得合適的版本。


備忘錄模式的優缺點

備忘錄模式的一大優點就是能夠保存和還原狀態,特別適合那些需要頻繁保存進度的系統,例如遊戲、編輯器或者設定管理工具。這樣即使做錯了選擇,也可以快速返回先前的狀態,避免大範圍的損失。


不過這個模式也有缺點。當系統的狀態太大,或者保存狀態的頻率太高時,會佔用很多記憶體,影響效能。因此,使用這個模式時需要謹慎,特別是在大型系統中。


總結一下,備忘錄模式提供了一種優雅的方式來保存和恢復系統狀態,非常適合用於需要「後悔藥」的場景,像是遊戲中的存檔功能、檔案編輯中的復原重做等。這個模式雖然靈活,但過度使用可能會對系統效能造成負擔。


對設計模式感興趣的朋友,推薦參考我在iThome鐵人賽的文章。
https://ithelp.ithome.com.tw/articles/10349194

    avatar-img
    6會員
    83內容數
    對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    ShengYu的沙龍 的其他內容
    在開發大型系統時,常常會發現各個物件之間的溝通愈來愈複雜,像是編織成了一張複雜的蜘蛛網。每個物件相互依賴,任何改動都可能牽一髮而動全身。這時候中介者模式就能幫助我們化繁為簡,成為一個「協調者」,讓物件之間的溝通變得簡單清晰。 什麼是中介者模式? 中介者模式是一種行為型設計模式,它讓物件之間的
    你有沒有遇過這樣的情況:需要一個接一個地處理某個集合裡的東西,但又不想去理解它內部是如何儲存的?就像你讀書時,只要翻頁閱讀,不用去管書的裝訂方式。這就是迭代器模式要解決的問題。 什麼是迭代器模式? 迭代器模式就是提供了一個統一的方式來遍歷集合中的元素,而不必暴露集合的內部結構。這很像你在看一
    你有沒有注意到,有些應用程式的行為會根據不同的狀態而有所不同?當你使用音樂播放器時,按下「播放」按鈕,播放器會開始播放音樂;當音樂處於暫停狀態時,按下同一個按鈕卻是繼續播放,而不是重頭播放。這就是狀態模式的典型應用。每一個狀態都對應著不同的行為,而這些行為隨著狀態的變化而變化。 什麼是狀態模式
    想像一下你要準備一場派對,需要買很多東西:零食、飲料、裝飾品等等。通常你可能得跑好幾個商店,每個商品都要分別結帳,光是想到這就覺得頭大。但現在有了一個新的購物平台,你只要把想買的東西全部加到購物車,然後點一下「結帳」,這些東西就會自動送到你家。這不就是超方便嗎?這就是 門面模式 Facade Pat
    今天來聊聊一個有趣的組合模式 Composite Pattern。想像你正在整理電腦裡的檔案。有時候你會打開單一的檔案,有時候則是整個資料夾。不論是單一檔案還是資料夾,你都希望能用相同的方式來處理它們,比如移動或刪除它們,這就是組合模式要解決的問題! 什麼是組合模式? 組合模式是一種結構型設
    當你旅行到不同國家時,你可能會遇到不同的插座類型和電壓規格。如果你只帶了一台手機充電器,卻沒有合適的轉接器,無論你的手機多麼高級它都無法充電。這時候一個小小的插頭轉接器就能救你一命,讓你的裝置可以順利使用。這個插頭轉接器的角色,就像軟體設計中的轉接器模式 Adapter Pattern 一樣。
    在開發大型系統時,常常會發現各個物件之間的溝通愈來愈複雜,像是編織成了一張複雜的蜘蛛網。每個物件相互依賴,任何改動都可能牽一髮而動全身。這時候中介者模式就能幫助我們化繁為簡,成為一個「協調者」,讓物件之間的溝通變得簡單清晰。 什麼是中介者模式? 中介者模式是一種行為型設計模式,它讓物件之間的
    你有沒有遇過這樣的情況:需要一個接一個地處理某個集合裡的東西,但又不想去理解它內部是如何儲存的?就像你讀書時,只要翻頁閱讀,不用去管書的裝訂方式。這就是迭代器模式要解決的問題。 什麼是迭代器模式? 迭代器模式就是提供了一個統一的方式來遍歷集合中的元素,而不必暴露集合的內部結構。這很像你在看一
    你有沒有注意到,有些應用程式的行為會根據不同的狀態而有所不同?當你使用音樂播放器時,按下「播放」按鈕,播放器會開始播放音樂;當音樂處於暫停狀態時,按下同一個按鈕卻是繼續播放,而不是重頭播放。這就是狀態模式的典型應用。每一個狀態都對應著不同的行為,而這些行為隨著狀態的變化而變化。 什麼是狀態模式
    想像一下你要準備一場派對,需要買很多東西:零食、飲料、裝飾品等等。通常你可能得跑好幾個商店,每個商品都要分別結帳,光是想到這就覺得頭大。但現在有了一個新的購物平台,你只要把想買的東西全部加到購物車,然後點一下「結帳」,這些東西就會自動送到你家。這不就是超方便嗎?這就是 門面模式 Facade Pat
    今天來聊聊一個有趣的組合模式 Composite Pattern。想像你正在整理電腦裡的檔案。有時候你會打開單一的檔案,有時候則是整個資料夾。不論是單一檔案還是資料夾,你都希望能用相同的方式來處理它們,比如移動或刪除它們,這就是組合模式要解決的問題! 什麼是組合模式? 組合模式是一種結構型設
    當你旅行到不同國家時,你可能會遇到不同的插座類型和電壓規格。如果你只帶了一台手機充電器,卻沒有合適的轉接器,無論你的手機多麼高級它都無法充電。這時候一個小小的插頭轉接器就能救你一命,讓你的裝置可以順利使用。這個插頭轉接器的角色,就像軟體設計中的轉接器模式 Adapter Pattern 一樣。
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    這篇文章描述了作者對於生活中遺留的習慣、記憶和物品的反思和回憶。作者選擇以網路書寫的方式來重新梳理和分享這些記憶。從筆記的撕下到數位工具的使用,都展現了作者對於記憶整理的執著和努力。
    這個解離失憶症真是讓人無法接受的1點就是, 它恢復記憶都是1點點的, 到底是怎麼樣? 我現在想要有使用電腦的功能, 我就是不會用, 不是我不會, 是我記不起來怎麼用? 我想起來之前的1點點記憶, 但是那個跟我現在要用的東西不一樣阿, 我現在需要的是電腦的能力, 我可以選擇我要使用
    Thumbnail
    囤物代表怎樣的執念和對人生的影響?傷痛又要怎樣整理才能讓人重新振作呢?
    Thumbnail
    作為一個有收藏欲的人,偶像的戲劇光碟、雜誌、電影票,遊戲送的小飾品、小卡,小說送的明信片、小海報等等,都會是收藏的目標,有想過要在架子上,騰出一格專門用來放週邊,但展示方式和保存情況,實在是很需要深思熟慮的一件事,所以一直都只是粗略的,用A4文件盒分裝了一下 那天又一個心血來潮,總覺得這些週邊
    Thumbnail
    遺忘A的最好方式,我想就是找個B來專注,不能多,只能少而專精,一旦又分散注意力了,那種迫切回到舒適圈的拉力像貓聞到味道般:我知道這裡有什麼,我看不到,但我確定這裡有什麼,再用力刨。 可我不想再聚焦在誰身上了,不管對方是誰,都讓我好疲倦,我的身體因期待而膠著著,因回覆而切換著喜怒哀樂,過去那個能在書
    Thumbnail
    上一集中我們講到通訊錄的應用,恰巧結合「整理新生活運動」中的社交斷捨離,而本集要來探討整理新生活運動中的「親情」、「愛情」可以用什麼數位收納的方式來整理。
    從記憶的碎片中,開始慢慢的拼湊,試著得到完整的圖案。或許會跌跌撞撞,或許會一路順暢,而你也只能選擇享受這熟悉又陌生的旅程。 夢境是淺意識的反射;即便表面波瀾無驚 試著嘗試各種方法,希望能找到答案。想再次從他們的口中獲得讚賞,告訴自己已做得很好,放過自己吧,好好的休息。你該停下來,別再東奔西跑的尋
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    這篇文章描述了作者對於生活中遺留的習慣、記憶和物品的反思和回憶。作者選擇以網路書寫的方式來重新梳理和分享這些記憶。從筆記的撕下到數位工具的使用,都展現了作者對於記憶整理的執著和努力。
    這個解離失憶症真是讓人無法接受的1點就是, 它恢復記憶都是1點點的, 到底是怎麼樣? 我現在想要有使用電腦的功能, 我就是不會用, 不是我不會, 是我記不起來怎麼用? 我想起來之前的1點點記憶, 但是那個跟我現在要用的東西不一樣阿, 我現在需要的是電腦的能力, 我可以選擇我要使用
    Thumbnail
    囤物代表怎樣的執念和對人生的影響?傷痛又要怎樣整理才能讓人重新振作呢?
    Thumbnail
    作為一個有收藏欲的人,偶像的戲劇光碟、雜誌、電影票,遊戲送的小飾品、小卡,小說送的明信片、小海報等等,都會是收藏的目標,有想過要在架子上,騰出一格專門用來放週邊,但展示方式和保存情況,實在是很需要深思熟慮的一件事,所以一直都只是粗略的,用A4文件盒分裝了一下 那天又一個心血來潮,總覺得這些週邊
    Thumbnail
    遺忘A的最好方式,我想就是找個B來專注,不能多,只能少而專精,一旦又分散注意力了,那種迫切回到舒適圈的拉力像貓聞到味道般:我知道這裡有什麼,我看不到,但我確定這裡有什麼,再用力刨。 可我不想再聚焦在誰身上了,不管對方是誰,都讓我好疲倦,我的身體因期待而膠著著,因回覆而切換著喜怒哀樂,過去那個能在書
    Thumbnail
    上一集中我們講到通訊錄的應用,恰巧結合「整理新生活運動」中的社交斷捨離,而本集要來探討整理新生活運動中的「親情」、「愛情」可以用什麼數位收納的方式來整理。
    從記憶的碎片中,開始慢慢的拼湊,試著得到完整的圖案。或許會跌跌撞撞,或許會一路順暢,而你也只能選擇享受這熟悉又陌生的旅程。 夢境是淺意識的反射;即便表面波瀾無驚 試著嘗試各種方法,希望能找到答案。想再次從他們的口中獲得讚賞,告訴自己已做得很好,放過自己吧,好好的休息。你該停下來,別再東奔西跑的尋