java设计模式-Memento(备忘录)模式

一、Memento模式的目的:
       memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.

二、Memento模式的简单例子:


package memento;  
  
import java.io.File;  
  
public class Originator {  
      
    private int number;   
    private File file = null;  
      
    public Originator(){  
          
    }  
      
    // 创建一个Memento,将自身作为参数传入  
    public Memento getMemento(){  
        return new Memento(this);  
    }  
      
    //从Memento中取出保存的数据,恢复为原始状态  
    public void setMemento(Memento m){  
        number = m.getNumber();  
        file = m.getFile();  
    }  
  
    public int getNumber() {  
        return number;  
    }  
  
    public void setNumber(int number) {  
        this.number = number;  
    }  
  
    public File getFile() {  
        return file;  
    }  
  
    public void setFile(File file) {  
        this.file = file;  
    }     
}  
 
          package memento;  
  
import java.io.File;  
import java.io.Serializable;  
  
public class Memento implements Serializable {  
      
    private int number;  
    private File file = null;  
      
    public Memento(Originator o){  
        this.number = o.getNumber();  
        this.file = o.getFile();  
    }  
  
    public int getNumber() {  
        return this.number;  
    }  
  
    public void setNumber(int number) {  
        this.number = number;  
    }  
  
    public File getFile() {  
        return this.file;  
    }  
  
    public void setFile(File file) {  
        this.file = file;  
    }  
      
      
}  



三、Memento模式的特点:

在需要提供保存、恢复对象状态的类中,必须提供两个方法:

1.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录,也就通过
 public Memento getMemento(){  
        return new Memento(this);  
    } 
 

来构造一个Memento的对象,Memento类有一个带参的构造方法,参数为要保存的对象,这样,Memento对象就保存了Originator对象的属性
2.恢复对象之前状态的方法:,待Originator对象操作完成之后,通过
    
     public void setMemento(Memento m){      
                    number = m.getNumber();     
                    file = m.getFile();    
           } 
 

来传入之前构造的Memento对象,来恢复Originator原来对象的状态
该模式模式的缺点是耗费大,如果内部状态很多,再保存一份,无疑要浪费大量内存.

[img][/img]
java设计模式-Memento(备忘录)模式


参考 http://zuoqiang.iteye.com/blog/744024

你可能感兴趣的:(java,设计模式,memento,备忘录)