zoukankan      html  css  js  c++  java
  • Java设计模式(21)——行为模式之备忘录模式(Memento)

    一、概述

      概念

      

       UML简图

      

       角色

      根据下图得到角色

      

      备忘录角色(Memento)、发起人角色(Originator)、负责人角色(Caretaker)

    二、实践

      使用白箱实现,给出角色的代码:

      发起人

    /**
     * 发起者
     *
     * @author Administrator
     **/
    public class Originator {
        /**
         * 发起者想要保存的状态
         */
        private String state;
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    
        /**
         * 返回备忘录角色的工厂方法
         * @return 备忘录角色
         */
        public Memento createMemento() {
            return new Memento(state);
        }
        public void restoreMemento(Memento m) {
            this.state = m.getState();
        }
    }

      备忘录

    /**
     * 备忘录角色
     *
     * @author Administrator
     **/
    public class Memento {
        private String state;
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    
        public Memento(String state) {
            this.state = state;
        }
    }

      负责人

    /**
     * 负责人
     *
     * @author Administrator
     **/
    public class Caretaker {
        private Memento memento;
    
        public Memento getMemento() {
            return memento;
        }
    
        public void setMemento(Memento memento) {
            this.memento = memento;
        }
    }

      客户端

    /**
     * 客户端
     * @author  Administrator
     **/
    public class Client {
        private static Originator originator = new Originator();
        private static Caretaker caretaker = new Caretaker();
        public static void main(String[] args) {
            // 改变发起人状态
            originator.setState("new");
            // 创建备忘录并由负责人保存
            caretaker.setMemento(originator.createMemento());
            // 修改发起人状态
            originator.setState("show");
            System.out.println(originator.getState());
            // 恢复状态
            originator.restoreMemento(caretaker.getMemento());
            System.out.println(originator.getState());
        }
    }

    三、改进与思考

      这里就不再展开黑箱实现了,给出《Java与模式》中的实现方案

      

       一些实际运用

      例如WEB运用中输入表单的时候可以通过备忘录模式进行一些表单数据的回显。

  • 相关阅读:
    vue项目中npm安装sass,less,stylus
    jQueryniceScroll滚动条错位问题
    基于github发布 个人网站/博客
    【转载】预处器的对比——Sass、LESS和Stylus
    元素,布局方式,BFC和清除浮动
    使用git向github中添加项目并更新(备忘录)
    nginx 之 grok 过滤
    gitlab 同步小脚本
    svn同步小脚本
    使用pip命令自动生成项目安装依赖清单
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7767100.html
Copyright © 2011-2022 走看看