博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】备忘录模式
阅读量:6242 次
发布时间:2019-06-22

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

什么是备忘录模式

保存对象的某个状态并可以恢复到该状态

补充说明

例子很多,如回退 ctri + z,回滚,ps恢复到操作历史的某一刻等等。。。

角色

备忘录角色:存储状态

发起人角色:创建备忘录,并利用备忘录存储自己的状态

负责人:管理备忘录

客户端

例子,JAVA实现

例子描述:显示一个对象的历史状态

备忘录角色:存储发起人的状态

package dp.memento;public class Memento {  private String state;  private float x;  private float y;  public Memento(String state, float x, float y) {    this.state = state;    this.x = x;    this.y = y;  }    /**   * getState.   * @return the state   */  public String getState() {    return state;  }    /**   * setState.   * @param state the state to set   */  public void setState(String state) {    this.state = state;  }    /**   * getX.   * @return the x   */  public float getX() {    return x;  }    /**   * setX.   * @param x the x to set   */  public void setX(float x) {    this.x = x;  }    /**   * getY.   * @return the y   */  public float getY() {    return y;  }    /**   * setY.   * @param y the y to set   */  public void setY(float y) {    this.y = y;  }}

发起人角色,希望存储自己的历史状态

package dp.memento;public class Originator {  private String state;  private float x;  private float y;  public String getState() {    return state;  }  public void setState(String state) {    this.state = state;  }  public Memento saveToMemento() {    return new Memento(state, x, y);  }  public void restoreFromMemento(Memento memento) {    this.state = memento.getState();    this.x = memento.getX();    this.y = memento.getY();  }    /**   * getX.   * @return the x   */  public float getX() {    return x;  }    /**   * setX.   * @param x the x to set   */  public void setX(float x) {    this.x = x;  }    /**   * getY.   * @return the y   */  public float getY() {    return y;  }    /**   * setY.   * @param y the y to set   */  public void setY(float y) {    this.y = y;  }}

备忘录管理者(保存发起人的历史状态记录)

package dp.memento;public class Originator {  private String state;  private float x;  private float y;  public String getState() {    return state;  }  public void setState(String state) {    this.state = state;  }  public Memento saveToMemento() {    return new Memento(state, x, y);  }  public void restoreFromMemento(Memento memento) {    this.state = memento.getState();    this.x = memento.getX();    this.y = memento.getY();  }    /**   * getX.   * @return the x   */  public float getX() {    return x;  }    /**   * setX.   * @param x the x to set   */  public void setX(float x) {    this.x = x;  }    /**   * getY.   * @return the y   */  public float getY() {    return y;  }    /**   * setY.   * @param y the y to set   */  public void setY(float y) {    this.y = y;  }}

客户端Main

package dp.memento;public class Main {  public static void main(String[] args) {    Originator originator = new Originator();     //发起人    MementoMgt mementoMgt = new MementoMgt();     //备忘录管理,负责存储历史状态    originator.setState("2017-01-01");    originator.setX(1.4f);    originator.setY(5.4f);    mementoMgt.add(originator.saveToMemento());    //记录状态        originator.setState("2017-04-03");    originator.setX(44.4f);    originator.setY(52.4f);    mementoMgt.add(originator.saveToMemento());    //记录状态        originator.setState("2017-06-01");    originator.setX(231.4f);    originator.setY(555.4f);    mementoMgt.add(originator.saveToMemento());    //记录状态        originator.setState("2017-06-22");    originator.setX(132.4f);    originator.setY(53.4f);    mementoMgt.add(originator.saveToMemento());    //记录状态    System.out.println("状态历史:");    for (Memento m : mementoMgt.getMementoList()) {      System.out.println(m.getState() + ": " + m.getX() + ", " + m.getY());    }    System.out.println("当前状态:");    System.out.println(originator.getState() + ": " + originator.getX() + ", " + originator.getY());        originator.restoreFromMemento(mementoMgt.getByState("2017-04-03")); //恢复到指定状态--2017-04-03    System.out.println("恢复后的状态:");    System.out.println(originator.getState() + ": " + originator.getX() + ", " + originator.getY());  }}

结果打印:

状态历史:
2017-01-01: 1.4, 5.4
2017-04-03: 44.4, 52.4
2017-06-01: 231.4, 555.4
2017-06-22: 132.4, 53.4
当前状态:
2017-06-22: 132.4, 53.4
恢复后的状态:
2017-04-03: 44.4, 52.4

本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5222287.html,如需转载请自行联系原作者

你可能感兴趣的文章
Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
CTeX-2.4.6-Full
查看>>
python编码
查看>>
增加squid的filedescriptors
查看>>
Xmanger远程登录Linux服务器
查看>>
Windows Ready Boost,使用闪存设备提高性能
查看>>
mysql导入导出包括函数或者存储过程
查看>>
工作流程组件介绍 ━ RDIFramework.NET ━ .NET快速信息化系统开发框架
查看>>
Struts2中Action访问Servlet API的三种方法
查看>>
个性化自己系统的ContextLoaderListener实现
查看>>
Java之final修饰
查看>>
CentOS下添加用户并且让用户获得root权限
查看>>
5月29早上VM HA故障
查看>>
mysqldump参数详解
查看>>
new begin
查看>>
List集合按Size分组
查看>>
windows下安装jandgo
查看>>
【译】你可以用GitHub做的12件 Cool 事情
查看>>
看图你就明白一个光棍的道理 [图片]
查看>>
ul宽度不固定,li的数量不定要保持居中???
查看>>