首页 > 编程语言 >Java: Memento Pattern

Java: Memento Pattern

时间:2022-09-28 22:15:05浏览次数:45  
标签:12 Java Pattern 09 2022 public Memento

 

/**
 * 版权所有 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() );

  

输出:

发起者开始
状态 = 开
状态 = 关
内部备忘录讲话
状态 = 开

  

标签:12,Java,Pattern,09,2022,public,Memento
From: https://www.cnblogs.com/geovindu/p/16739724.html

相关文章

  • Java基础 值传递和引用传递
    Java基础值传递和引用传递1.问题描述由于Java中是没有指针的,Java中只存在值传递,只存在值传递!!!!‘在实际使用中,我们经常使用对象的传递,这种看起来很像引用传递,可以改变对......
  • 【笔记】Java相关大杂烩②
    【笔记】Java相关大杂烩②if单分支情况下,如果没有加{},那么默认只包含第一条语句。if和else分支后面如果包含多条语句,那么需要使用{}括起来。不能随意地使用数学上......
  • Java第二讲动手动脑
    1.运行结果  上述代码方法名相同,但是数据类型不同,体现了Java重载的特点(1)方法名相同(2)参数类型不同,参数个数不同,或者是参数类型的顺序不同。也体现了Java中,当函数名......
  • java资源精华
    1. java基础教程虚拟机性能分析和故障解决工具_哔哩哔哩_bilibili2.https://www.bilibili.com/video/BV1Eb4y1v7mB/?p=2&vd_source=3d22ebd70535ac1bb918868055a3c5d8......
  • java笔记
    **命名规范:**首字母大写,后面每个单词首字母大写(大驼峰)HelloWrold变量名规范:首字母小写,后面每个单词首字母大写(小驼峰)helloWorld方法变量名规范:同变量名 常量:在程序运......
  • 【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCr
    问题描述使用JavaSDK获取KeyVaultSecret机密信息时,需要获取授权。通常是使用AAD的注册应用(ClientID,TenantID,ClientSecret)来获取 credential对象。Sec......
  • 计算机类毕业设计选题推荐 springboot+vue宠物医院管理系统 java宠物预约挂号系统 微
    ......
  • JavaDoc
    packagebase;publicclassDoc{Stringname;/****@paramname;*@return;*@throwsException;*///由/**回车打出......
  • 【Java基础】自定义异常类
    1.自定义异常类(1)继承现有异常类:比如RuntimeException、Exception。(2)提供全局常量:serialVersionUID。(3)提供重载构造器。publicclassValueExceptionextendsException......
  • 【Java基础】抛出异常throws
    1.throws声明抛出异常一个方法中可能出现异常,那么可以使用throws抛出异常,交给这个方法的调用者处理(也不处理就继续向上抛,直到main方法)。publicvoidsay()throwsCl......