Java: Memento Pattern

 

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

  

输出:

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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章