當前位置:
首頁 > 最新 > Java的設計模式-備忘錄模式

Java的設計模式-備忘錄模式

備忘錄模式(Memonto Pattern)

在不被破壞封裝的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣可以在以後將對象恢復到原先保存的狀態。

優點:實現新的封裝和提供了狀態恢復的實現機制

缺點:資源消耗過大

模式結構:

1.Originator(原發器)

保存內部狀態的類稱為原發器。原發器可以創建一個備忘錄,並存儲它的當前狀態,也可以使用備忘錄來恢復其內部狀態。

2.Memonto(備忘錄)

備忘錄對象不能直接被其他類使用,根據原發器來決定保存哪些內部狀態。

3.Caretaker(負責人)

負責人又稱管理者,它負責保存備忘錄,但不能對備忘錄的內容進行檢查或者操作。它可以保存一個或者多個備忘錄對象。

例子恢復用戶信息

原發器UserInfoOriginator

包memento_22_1; / ** *用戶信息類(原發器) * / public class UserInfoOriginator { //用戶名 private String username; //密碼 private String password; //電話號碼 private String phoneNumber; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } / ** *保存備忘錄 * @return返回一個新的備忘錄對象 * / public Memento saveMemento() { return new Memento(username,password,phoneNumber); } / ** *恢復備忘錄對象 * @param memento * / public void restoreMemento(Memento memento) { this.username = memento.getUsername(); this.password = memento.getPassword(); this.phoneNumber = memento.getPhoneNumber(); } / ** *顯示用戶信息 * / public void show() { System.out.println(「username:」+ username); System.out.println(「password:」+ password); System.out.println(「phoneNumber:」+ phoneNumber); } }

2.備忘錄

包memento_22_1; / ** *備忘錄 * / public class Memento { //用戶名 private String username; //密碼 private String password; //電話號碼 private String phoneNumber; public Memento() { } public Memento(String username,String password,String phoneNumber) { this.username = username; this.password = password; this.phoneNumber = phoneNumber; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }

3.負責人

包memento_22_1; / ** *負責人 * / public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }

4.測試類(初始狀態--->修改狀態--->恢復狀態)

包memento_22_1; / ** *測試類 * / public class Test { public static void main(String [] args) { //創建原發器 UserInfoOriginator originator = new UserInfoOriginator(); //創建負責人 Caretaker taker = new Caretaker(); originator.setUsername( 「張三」); originator.setPassword( 「{}」); originator.setPhoneNumber( 「13800138000」); show(發起人,「初始狀態」); //保存狀態 taker.setMemento(originator.saveMemento()); //修改密碼和電話號碼 originator.setPassword( 「{}」); originator.setPhoneNumber( 「{}x」); show(originator,「修改狀態」); //恢復狀態一 originator.restoreMemento(taker.getMemento()); show(發起者,「恢復到初始狀態」); } private static void show(UserInfoOriginator originator,String status) { System.out.println(status +「:」); originator.show(); 的System.out.println( 「-----------------------」); } }

運行結果


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

JAVA初學者必須掌握的30個基本概念
程序員是如何被外行給逼瘋的……
歸併排序詳解遞歸和非遞歸實現
SpringMVC從入門到 精通第七章
MyEclipse 內存不足問題

TAG:java學習吧 |

您可能感興趣

Scala 模式匹配
「設計模式專題」Singleton
拍攝模式之Auto模式及曝光程序模式
UI重新設計 谷歌的Gmail即將推出保密模式
亞馬遜揭開SageMaker AI服務的面紗,分享能夠大規模地訓練機器學習模式
Metamucil推出VR技術用戶互動體驗新模式
絕地求生event新模式,信號槍模式技巧!
thinkphp框架利用MVC模式使用模型查詢資料庫數組的四種寫法
Python 模式匹配與正則表達式
Teradata向訂閱模式的轉型初顯成效
理解Vmware虛擬機的網路模式
Photoshop使用混合模式繪製蘋果圖標
Flutter 的編譯模式
AngularJS中的MVC模式
LeBron James 正式進入季後賽模式: 我將試著主宰一切
Python設計模式:為了整潔又時尚的代碼
蘋果iPhonex如何進入dfu模式?蘋果iPhonex進入恢復模式操作方法
最美iPad Pro概念設計曝光:全新多任務模式
「並發編程」Future模式及JDK中的實現
Python 中的單例模式