日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

發(fā)布時(shí)間:2025/6/17 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、備忘錄模式簡(jiǎn)介
  • 二、備忘錄模式 適用場(chǎng)景
  • 三、備忘錄模式 優(yōu)缺點(diǎn)
  • 四、備忘錄模式 與 狀態(tài)模式
  • 五、備忘錄模式 代碼示例
    • 1、文檔類(lèi)
    • 2、文檔備忘錄類(lèi)
    • 3、文檔備忘錄管理類(lèi)
    • 4、測(cè)試類(lèi)





一、備忘錄模式簡(jiǎn)介



備忘錄模式 : 保存 對(duì)象 某個(gè)狀態(tài) , 以便在 適當(dāng)?shù)臅r(shí)候 恢復(fù)對(duì)象 ;
( 形象的比喻 : " 后悔藥 " )

如 : 游戲存檔 , 一些編輯工具中的 " 撤銷(xiāo) " 操作 , 瀏覽器中的 后退 ;


備忘錄模式 類(lèi)型 : 行為型 ;





二、備忘錄模式 適用場(chǎng)景



備忘錄模式 適用場(chǎng)景 :

  • 撤銷(xiāo)操作 : 保存 / 恢復(fù) 數(shù)據(jù) 的相關(guān)業(yè)務(wù)場(chǎng)景 ;
    如 : 在 Word 中編寫(xiě)文檔 , 如果想要撤銷(xiāo)之前的 輸入 / 刪除操作 , 使用 Ctrl + Z 執(zhí)行 " 撤銷(xiāo) " 操作 ;

  • 狀態(tài)恢復(fù) : 在 " 后悔 " 的時(shí)候 , 將對(duì)象恢復(fù)到之前的狀態(tài) ;
    如 : 游戲中的存檔使用 ;





三、備忘錄模式 優(yōu)缺點(diǎn)



備忘錄模式 優(yōu)點(diǎn) :

  • 存檔信息 : 封裝 存檔信息 ;
  • 恢復(fù)機(jī)制 : 為 用戶(hù) 提供一種 可恢復(fù) 機(jī)制 ;

先封裝 存檔信息 , 然后才可以提供 可恢復(fù)機(jī)制 ;
封裝的 對(duì)象的狀態(tài) , 就是 對(duì)象中 各個(gè)屬性的屬性值 , 快照 ;


備忘錄模式 缺點(diǎn) : 資源占用 , 會(huì)額外 占用 磁盤(pán) / 內(nèi)存 等資源 ;





四、備忘錄模式 與 狀態(tài)模式



備忘錄模式 與 狀態(tài)模式 :

  • 備忘錄模式狀態(tài)表示 : 備忘錄模式 中 , 使用 對(duì)象實(shí)例 表示狀態(tài) , 當(dāng)前對(duì)象的 存檔 是該對(duì)象的實(shí)例 ;

  • 狀態(tài)模式狀態(tài)表示 : 狀態(tài)模式 中 , 使用 類(lèi) 表示狀態(tài) ;





五、備忘錄模式 代碼示例



業(yè)務(wù)場(chǎng)景 : 編輯文檔 , 有暫存功能 , 暫時(shí)先保存到內(nèi)存中 ;


1、文檔類(lèi)


package memento;/*** 文檔* 需要保存的對(duì)象*/ public class Article {private String title;private String content;private String image;public Article(String tittle, String content, String image) {this.title = tittle;this.content = content;this.image = image;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getImage() {return image;}public void setImage(String image) {this.image = image;}/*** 保存信息到備忘錄* @return*/public ArticleMemento saveToMemento() {ArticleMemento articleMemento = new ArticleMemento(title, content, image);return articleMemento;}/*** 從備忘錄恢復(fù)* @param articleMemento*/public void undoFromMemento(ArticleMemento articleMemento) {this.title = articleMemento.getTitle();this.content = articleMemento.getContent();this.image = articleMemento.getImage();}@Overridepublic String toString() {return "Article{" +"title='" + title + '\'' +", content='" + content + '\'' +", image='" + image + '\'' +'}';} }

2、文檔備忘錄類(lèi)


package memento;/*** 文檔的備忘錄類(lèi)* 主要用于存儲(chǔ)文檔的各種屬性狀態(tài)信息* 備忘錄 快照 沒(méi)有 set 方法* 只能通過(guò)構(gòu)造函數(shù)設(shè)置備忘錄數(shù)據(jù)*/ public class ArticleMemento {private String title;private String content;private String image;public ArticleMemento(String title, String content, String image) {this.title = title;this.content = content;this.image = image;}public String getTitle() {return title;}public String getContent() {return content;}public String getImage() {return image;}@Overridepublic String toString() {return "ArticleMemento{" +"title='" + title + '\'' +", content='" + content + '\'' +", image='" + image + '\'' +'}';} }

3、文檔備忘錄管理類(lèi)


package memento;import java.util.Stack;/*** 備忘錄管理類(lèi)*/ public class ArticleMementoManager {/*** 存儲(chǔ)所有的備忘錄信息* 在 棧 數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ) , 特點(diǎn)后進(jìn)先出*/private final Stack<ArticleMemento> mArticleMementoStack = new Stack<>();/*** 獲取棧頂?shù)膫渫浶畔? @return*/public ArticleMemento getArticleMemento() {return mArticleMementoStack.pop();}/*** 備忘錄信息入棧* 放在棧頂* @param articleMemento*/public void setArticleMemento(ArticleMemento articleMemento) {mArticleMementoStack.push(articleMemento);} }

4、測(cè)試類(lèi)


package memento;public class Main {public static void main(String[] args) {ArticleMementoManager articleMementoManager = new ArticleMementoManager();// 創(chuàng)建并輸入文檔內(nèi)容Article article = new Article("標(biāo)題", "內(nèi)容", "圖片鏈接");// 保存?zhèn)渫浶畔?/span>ArticleMemento articleMemento = article.saveToMemento();// 將備忘錄信息設(shè)置到 備忘錄管理者articleMementoManager.setArticleMemento(articleMemento);// 打印備忘錄內(nèi)容System.out.println("文檔信息 : " + article.toString());// 修改文檔內(nèi)容article.setTitle("標(biāo)題 2");article.setContent("內(nèi)容 2");article.setImage("圖片鏈接 2");// 保存新的備忘錄信息articleMemento = article.saveToMemento();// 將備忘錄信息設(shè)置到 備忘錄管理者articleMementoManager.setArticleMemento(articleMemento);// 打印備忘錄內(nèi)容System.out.println("文檔信息 : " + article.toString());// 此時(shí) ArticleMementoManager 中存儲(chǔ)了 2 個(gè)存檔// 存檔 1 : Article{title='標(biāo)題', content='內(nèi)容', image='圖片鏈接'}// 存檔 2 : Article{title='標(biāo)題 2', content='內(nèi)容 2', image='圖片鏈接 2'}// 使用備忘錄回退// 先將棧頂?shù)漠?dāng)前備忘錄出棧 , 移除articleMementoManager.getArticleMemento();// 然后獲取上一個(gè)備忘錄 , 并設(shè)置到 Article 中article.undoFromMemento(articleMementoManager.getArticleMemento());// 打印備忘錄內(nèi)容System.out.println("文檔信息 : " + article.toString());} }

總結(jié)

以上是生活随笔為你收集整理的【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。