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

  • 相关阅读:
    【转】Visual Studio 2008中使用科学计算库GSL
    【转】[Python Tip]如何在Windows下方便地进入命令行运行程序
    【转】URL Encoding (URL转义字符)
    RDLC报表,纯文字内容,动态数据源 解决方案
    C# 数值计算
    标准库List使用注意
    VS2008 运行出现 “无法启动该程序 计算机中丢失 MSVCR90D.dll”
    数据结构在游戏中的简单应用(转)
    SQL SERVER 2005 四种排序函数
    2010.11.30
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/8911136.html
Copyright © 2011-2022 走看看