19、備忘錄模式(Memento)
主要目的是儲存一個對象的某個狀态,以便在适當的時候恢複對象,個人覺得叫備份模式更形象些,通俗的講下:假設有原始類A,A中有各種屬性,A可以決定需要備份的屬性,備忘錄類B是用來存儲A的一些内部狀态,類C呢,就是一個用來存儲備忘錄的,且隻能存儲,不能修改等操作。
Original類是原始類,裡面有需要儲存的屬性value及建立一個備忘錄類,用來儲存value值。Memento類是備忘錄類,Storage類是存儲備忘錄的類,持有Memento類的執行個體,該模式很好了解。直接看源碼:
[java] view plaincopy
public class Original {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
public Original(String value) {
public Memento createMemento(){
return new Memento(value);
public void restoreMemento(Memento memento){
this.value = memento.getValue();
public class Memento {
public Memento(String value) {
public class Storage {
private Memento memento;
public Storage(Memento memento) {
this.memento = memento;
public Memento getMemento() {
return memento;
public void setMemento(Memento memento) {
測試類:
public class Test {
public static void main(String[] args) {
// 建立原始類
Original origi = new Original("egg");
// 建立備忘錄
Storage storage = new Storage(origi.createMemento());
// 修改原始類的狀态
System.out.println("初始化狀态為:" + origi.getValue());
origi.setValue("niu");
System.out.println("修改後的狀态為:" + origi.getValue());
// 回複原始類的狀态
origi.restoreMemento(storage.getMemento());
System.out.println("恢複後的狀态為:" + origi.getValue());
輸出:
初始化狀态為:egg
修改後的狀态為:niu
恢複後的狀态為:egg
簡單描述下:建立原始類時,value被初始化為egg,後經過修改,将value的值置為niu,最後倒數第二行進行恢複狀态,結果成功恢複了。其實我覺得這個模式叫“備份-恢複”模式最形象。