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() );

  

輸出:

發起者開始
狀態 = 開
狀態 = 關
內部備忘錄講話
狀態 = 開

  

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