• 备忘录模式--行为模式


    适用场景

    需要记录的源类

    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练习(赋予属性值)
    jquery练习
    jquery表单对象属性选择器
    jquery表单选择器
    jquery子元素选择器
    jquery属性选择器(同时匹配多个条件)
    jquery属性选择器
    jquery属性选择器(匹配具有指定属性的元素)
    jquery可见性选择器(综合)
    方法的递归
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/8911136.html
Copyright © 2020-2023  润新知