/** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 備忘錄模式 Memento Pattern/Snapshot Pattern/Token Pattern * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口類 * 2022-09-12 修改者:Geovin Du * 生成API幫助文檔的指令: *javadoc - -encoding Utf-8 -d apidoc MementoIF.java * Interface * Record * Annotation * Enum * */ package com.javapatterns.memento; /** * * * */ public interface MementoIF { /** * * * */ public void speak(); }
/** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 備忘錄模式 Memento Pattern/Snapshot Pattern/Token Pattern * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口類 * 2022-09-12 修改者:Geovin Du * 生成API幫助文檔的指令: *javadoc - -encoding Utf-8 -d apidoc Originator.java * Interface * Record * Annotation * Enum * */ package com.javapatterns.memento; /** * 發起人角色 * @author geovindu * @version 1.0 * */ public class Originator { /** * * * */ public Originator() { } /** * * * */ private String state; /** *返回一個備份錄對象 * * */ public MementoIF createMemento() { //System.out.println("備份錄開始"); return new Memento( this.state ); } /** *將發起人恢復得到備忘錄對象所記載的狀誠 * * */ public void restoreMemento( MementoIF memento) { /** * 內部成員 * */ Memento aMemento = (Memento) memento; aMemento.speak(); this.setState( aMemento.getState() ); } /** * * * */ public void speak() { System.out.println("發起者開始"); } /** *狀態取值 * * */ public String getState() { return this.state; } /** *狀態賦值 * * */ public void setState(String state) { this.state = state; System.out.println("狀態 = " + state); } /** *內部成員,備忘錄 * * */ class Memento implements MementoIF { /** * * * */ private String savedState; /** * * * */ private Memento(String someState) { savedState = someState; } public void speak() { System.out.println("內部備忘錄講話"); } /** *狀誠取值 * * */ private void setState(String someState) { savedState = someState; } /** *狀誠賦值 * * */ private String getState() { return savedState; } } }
/** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 備忘錄模式 Memento Pattern/Snapshot Pattern/Token Pattern * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口類 * 2022-09-12 修改者:Geovin Du * 生成API幫助文檔的指令: *javadoc - -encoding Utf-8 -d apidoc Memento.java * Interface * Record * Annotation * Enum * */ package com.javapatterns.memento; /** * 備忘錄角色 * * */ public class Memento implements MementoIF{ /** * * * */ private String savedState; /** * * * */ private Originator lnkOriginator; /** *備忘錄角色 構造 * @param someState 狀態 * */ private Memento(String someState) { savedState = someState; } /** * * * */ private void setState(String someState) { savedState = someState; } /** * * * */ public void speak() { System.out.println("備份錄開始"); } /** * * * */ private String getState() { return savedState; } }
/** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 備忘錄模式 Memento Pattern/Snapshot Pattern/Token Pattern * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口類 * 2022-09-12 修改者:Geovin Du * 生成API幫助文檔的指令: *javadoc - -encoding Utf-8 -d apidoc Caretaker.java * Interface * Record * Annotation * Enum * */ package com.javapatterns.memento; /** *負責人角色 * * */ public class Caretaker { /** * * * */ private MementoIF memento; /** * * * */ public MementoIF retrieveMemento() { //this.memento.speak(); return this.memento; } /** * * * */ public void saveMemento(MementoIF memento) { // memento.speak(); this.memento = memento; } }
調用:
//備忘錄模式 Originator o = new Originator(); o.speak(); //Memento m=new Memento("開"); // m.speak(); Caretaker c = new Caretaker(); o.setState("開"); // Store internal state c.saveMemento( o.createMemento() ); // Continue changing originator o.setState("關"); // Restore saved state o.restoreMemento( c.retrieveMemento() );
輸出:
發起者開始 狀態 = 開 狀態 = 關 內部備忘錄講話 狀態 = 開