/** * 版权所有 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() );
输出:
发起者开始 状态 = 开 状态 = 关 内部备忘录讲话 状态 = 开