博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式(21)——行为模式之备忘录模式(Memento)
阅读量:5337 次
发布时间:2019-06-15

本文共 1851 字,大约阅读时间需要 6 分钟。

一、概述

  概念

  

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

转载于:https://www.cnblogs.com/jiangbei/p/7767100.html

你可能感兴趣的文章
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>
Linux目录结构
查看>>