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出来

  • 相关阅读:
    解决软件卸载时Abstract: "Invalid serial number" xe4
    Delphi 数据类型列表
    delphi self.Update 什么作用
    delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)
    H5单页面架构:自定义路由 + requirejs + zepto + underscore
    H5单页面架构:backbone + requirejs + zepto + underscore
    H5单页面架构:requirejs + angular + angular-route
    基于angularJS和requireJS的前端架构
    单页面应用SPA架构
    自动化前端项目构建
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/8911136.html
Copyright © 2011-2022 走看看