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运用中输入表单的时候可以通过备忘录模式进行一些表单数据的回显。

  • 相关阅读:
    “无法更新EntitySet“*****”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法
    Web.Config全攻略
    C#常用的正则
    Asp.Net MVC2 Json
    webservice+Jquery返回Json格式【原创】
    JAVA线程池介绍以及简单实例
    从程序员到项目经理(17):你不是一个人在战斗思维一换天地宽
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    多表对应更新(跨服务器).sql
    sql导出excel.sql
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7767100.html
Copyright © 2011-2022 走看看