設計模式之學習 Memento模式
一、Memento模式的目的:
memento是一個保存另外一個對象內部狀態拷貝的對象.這樣以后就可以將該對象恢復到原先保存的狀態.
二、Memento模式的簡單例子:
下面的例子來源于Jdon網站的《GoF設計模式系列》的《Memento模式》,雖然簡單卻形象地表明了Memento模式的應用
package com.pattern.memento2;

/**
* 原始對象
*
* @author zdw
*
*/
public class Originator
{
private int age;
private String name;

public Memento getMemento()
{
return new Memento(this);
}
//取出Memento中先前保存的數據,恢復為初始狀態
public void setMemento(Memento m)
{
this.setAge(m.getAge());
this.setName(m.getName());
}

public int getAge()
{
return age;
}

public void setAge(int age)
{
this.age = age;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}
package com.pattern.memento2;
/***
* 備忘錄對象
* @author zdw
*
*/
public class Memento
{
private int age;
private String name;

public Memento(Originator o)
{
this.age = o.getAge();
this.name = o.getName();
}

public int getAge()
{
return age;
}

public void setAge(int age)
{
this.age = age;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}
測試類:
package com.pattern.memento2;

public class Client
{

public static void main(String[] args)
{
Originator o = new Originator();
o.setAge(18);
o.setName("馬云");

o.setMemento(new Memento(o));

Memento m = o.getMemento();

o.setAge(88);
o.setName("God");
// o對象的先前值
System.out.println(m.getAge() + "\n" + m.getName());
// o對象的新值
System.out.println(o.getAge() + "\n" + o.getName());
}

}
三、Memento模式的特點:
在需要提供保存、恢復對象狀態的類中,必須提供兩個方法:
.保存對象當前狀態方法:將對象自身(this)作為參數傳入,創建備忘錄。
.恢復對象之前狀態的方法:取出備忘錄/接收一個備忘錄對象,從中獲取對象之前的狀態
模式的缺點是耗費大,如果內部狀態很多,再保存一份,無意要浪費大量內存.
注意:Memento模式保存的是操作前對象的狀態,而不是操作后對象的狀態;否則就沒辦法做恢復了
memento是一個保存另外一個對象內部狀態拷貝的對象.這樣以后就可以將該對象恢復到原先保存的狀態.
二、Memento模式的簡單例子:
下面的例子來源于Jdon網站的《GoF設計模式系列》的《Memento模式》,雖然簡單卻形象地表明了Memento模式的應用












































































































三、Memento模式的特點:
在需要提供保存、恢復對象狀態的類中,必須提供兩個方法:
.保存對象當前狀態方法:將對象自身(this)作為參數傳入,創建備忘錄。
.恢復對象之前狀態的方法:取出備忘錄/接收一個備忘錄對象,從中獲取對象之前的狀態
模式的缺點是耗費大,如果內部狀態很多,再保存一份,無意要浪費大量內存.
注意:Memento模式保存的是操作前對象的狀態,而不是操作后對象的狀態;否則就沒辦法做恢復了
posted on 2008-06-11 15:48 々上善若水々 閱讀(646) 評論(0) 編輯 收藏 所屬分類: 設計模式