zoukankan      html  css  js  c++  java
  • 备忘录模式--行为模式

    适用场景

    需要记录的源类

    package design.behavior.memento;
    
    public class Stats {
        private String name;
        private String age;
        private String money;
    
        public Stats(String name, String age, String money) {
            this.name = name;
            this.age = age;
            this.money = money;
        }
    
        /**
         * 数据备份
         * @return
         */
        public Memento memento(){
            return new Memento(this);
        }
    
        /**
         * 恢复
         * @param memento
         * @return
         */
        public Stats recovery(Memento memento){
            return new Stats(memento.getName(),memento.getAge(),memento.getMoney());
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getMoney() {
            return money;
        }
    
        public void setMoney(String money) {
            this.money = money;
        }
    }

    备忘录(又叫便利贴纸)

    package design.behavior.memento;
    
    public class Memento {
    
        private String name;
        private String age;
        private String money;
    
        Memento(Stats stats){
            this.name=stats.getName();
            this.age=stats.getAge();
            this.money=stats.getMoney();
        }
    
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getMoney() {
            return money;
        }
    
        public void setMoney(String money) {
            this.money = money;
        }
    }

    CareTask存放备忘录的地方

    package design.behavior.memento;
    
    import java.util.LinkedList;
    
    public class CareTask {
        private LinkedList<Memento> linkedList = new LinkedList();
    
        public Memento getMemento(){
            if(linkedList.size()>0){
                return linkedList.pop();
            }
          return null;
        }
    
        public void setMemento(Memento memento){
            linkedList.push(memento);
        }
    
    }

    客户端client

    package design.behavior.memento;
    
    /**
     * 备忘录模式-记录每次操作的状态,用于回滚
     */
    public class Client {
        public static void main(String[] args) {
            CareTask careTask = new CareTask();
            Stats yyj = new Stats("yyj", "10", "2000");
            careTask.setMemento(yyj.memento());
            showStats(yyj);
    
            yyj.setMoney("11000");
            yyj.setAge("28");
            careTask.setMemento(yyj.memento());
            showStats(yyj);
    
            yyj.setMoney("21000");
            yyj.setAge("38");
            showStats(yyj);
    
            yyj = yyj.recovery(careTask.getMemento());
            showStats(yyj);
    
            yyj = yyj.recovery(careTask.getMemento());
            showStats(yyj);
    
        }
        private static void  showStats(Stats stats){
            System.out.println(String.format("我的名字:%s,我的年龄%s,我的工资%s"
                    ,stats.getName(),stats.getAge(),stats.getMoney()));
        }
    }

    其实备忘录模式某种意义上就是把对象clone一次,放在linkedList中,每次操作都Push进去,回滚就把状态对象pop出来

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/8911136.html
Copyright © 2011-2022 走看看