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

原文地址:https://www.cnblogs.com/jiangbei/p/7767100.html