备忘录模式(Memento Pattern)

备忘录模式(Memento Pattern)

ID:38331430

大小:128.00 KB

页数:10页

时间:2019-06-10

备忘录模式(Memento Pattern)_第1页
备忘录模式(Memento Pattern)_第2页
备忘录模式(Memento Pattern)_第3页
备忘录模式(Memento Pattern)_第4页
备忘录模式(Memento Pattern)_第5页
资源描述:

《备忘录模式(Memento Pattern)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、描述:    对象的状态可以定义为在特定的时间点对象的属性值。备忘录模式(Memento Pattern)应用于保存和跟踪对象的状态,以便于必要的时候可以把对象恢复到以前的状态。它很像恢复操作。备忘录模式(Memento Pattern)可以在不暴露对象的内部结构的情况下完成这样的功能。需要获取以前状态的对象就是指发起者(Originator)。当客户需要保存发起者的状态时,客户需要发起者的当前状态。发起者存贮所有保持它状态的属性到一个独立的对象,这个对象就是备忘录(纪念、记忆)Memento,把备忘录(Memento)对象返回给客户。备忘录(Mement

2、o)对象可以看作在给定的时间点包含另一个对象内部状态的对象。备忘录(Memento)对象必须向除了发起者以外的所有对象隐藏发起者变量的值。当发起者允许备忘录(Memento)对象访问它的内部状态时,备忘录(Memento)对象应该被设计为对其他对象采取访问限制的对象。    当客户需要把发起者的状态恢复到以前的状态时,它只是简单的把备忘录(Memento)对象返回给发起者。发起者使用包含在备忘录(Memento)对象中的状态信息,恢复自己到备忘录(Memento)对象中保存的状态。例子:    数据转化(Data conversion)总是那些涉及到从遗留

3、系统转化到应用新技术的系统不可缺少的一部分。让我们假定一个需要把客户数据从文本文件移植到关系型数据库中的类似应用程序。在将客户数据发送给数据库以前,要对客户纪录进行验证。    现实中,客户纪录需要包括很多属性,但是为了简单,让我们假定每一个客户纪录只有三个属性??first name、last name和credit card number。验证过程也很简单,只要last name不为空而且credit card number(信用卡号)仅有0-9的数字组成。当发现一个无效的客户记录时,验证过程需要停止、提示用户修正数据并重新开始。在这个时间点上,数据转

4、化(Data conversion)过程的状态需要保存在一个备忘录(Memento)对象内部。当用户重新开始验证过程时,数据装化过程从保存在备忘录(Memento)对象中的状态开始,验证过程从它停止的地方恢复,而不是从原数据起点重新开始。通常,备忘录(Memento)对象既可以保存在内存中也可以保存在持久介质上。在这个应用中,当应用被打断以后,状态需要保存,而且当应用再次运行的时候需要恢复。因此,在这种情况下,不适于把备忘录(Memento)对象保存在内存中,而是需要保存在持久介质上。    不是直接把合法的客户纪录插入到关系数据库中,应用程序而是生成一个

5、由SQL插入语句组成的文本文件,执行这些SQL语句可以把数据插入到数据库中。    让我们为这个验证过程设计不同的组件。DataConverter(发起者)DataConverter类(图32.1和Listing32.1)是数据转化过程的实现。  Figure 32.1: DataConverter Class?The Originator Listing 32.1: DataConverter Class 1.public class DataConverter { 2.  public static final String DATA_FILE = "

6、Data.txt"; 3.  public static final String OUTPUT_FILE = "SQL.txt"; 4.  private long ID = 0; 5.  public Memento createMemento() { 6.    return (new Memento(ID)); 7.  } 8.  public void setMemento(Memento memento) { 9.    if (memento != null) 10.     ID = memento.getID(); 11.  } 12. 

7、 public long getLastProcessedID() { 13.    return ID; 14.  } 15.  public void setLastProcessedID(long lastID) { 16.    ID = lastID; 17.  } 18.   public boolean process() { 19.    boolean success = true; 20.    String inputLine = ""; 21.    long currID = 0; 22.    try { 23.     Fil

8、e inFile = new File(DATA_FILE); 2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。