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初學者必須掌握的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 中的單例模式