經常使用計算機的人恐怕對系統備份(Memento)不會陌生,當你的Windows系統運行正常時,對它進行備份,當系統運行有問題時,就可以調用備份快速的將系統恢復,這樣就可以大量節省重新裝系統的痛苦,特別是當你缺少某一驅動,或在裝系統是出現一些怪問題時,猶爲痛苦。我想有過這種經歷的人應該很瞭解吧,呵呵!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
好了,下面讓我們看看這個過程該如何實現吧:
1、我們先定義Windows系統(WindowsSystem)類:
public class WindowsSystem {
private String state;
public Memento createMemento() { //創建備份,保存當前狀態
return new Memento(state);
}
public void restoreMemento(Memento memento){ //從備份中恢復系統
this.state=memento.getState();
}
public String getState(){ //獲得狀態
return this.state;
}
public void setState(String state){ //設置狀態
this.state=state;
System.out.println("當前系統處於"+this.state);
}
}
2、再定義備份(Memento)類:
public class Memento {
private String state;
public Memento(String state) { //備份
this.state=state;
}
public String getState(){ //獲得狀態
return this.state;
}
public void setState(String state){ //設置狀態
this.state=state;
}
}
3、定義用戶(User)類:
public class User {
private Memento memento;
public Memento retrieveMemento() { //恢復系統
return this.memento;
}
public void saveMemento(Memento memento){ //保存系統
this.memento=memento;
}
}
4、編寫測試類:
public class Test {
public static void main(String args[]) {
WindowsSystem Winxp = new WindowsSystem(); //Winxp系統
User user = new User(); //某一用戶
Winxp.setState("好的狀態"); //Winxp處於好的運行狀態
user.saveMemento(Winxp.createMemento()); //用戶對系統進行備份,Winxp系統要產生備份文件
Winxp.setState("壞的狀態"); //Winxp處於不好的運行狀態
Winxp.restoreMemento(user.retrieveMemento()); //用戶發恢復命令,系統進行恢復
System.out.println("當前系統處於"+Winxp.getState());
}
}
5、說明:
A:定義:Memento對象是一個保存另外一個對象內部狀態拷貝的對象,這樣以後就可以將該對象恢復到原先保存的狀態。
B:Memento模式的用意是在不破壞封裝的條件下,將一個對象的狀態捕捉住,並外部化,存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態。
C:Memento模式所涉及的角色有三個,備忘錄角色、發起人角色和負責人角色。
備忘錄角色的作用:
(1) 將發起人對象的內部狀態存儲起來,備忘錄可以根據發起人對象的判斷來決定存儲多少發起人對象的內部狀態。
(2) 備忘錄可以保護其內容不被髮起人對象之外的任何對象所讀取。
發起人角色的作用:
(1) 創建一個含有當前內部狀態的備忘錄對象。
(2) 使用備忘錄對象存儲其內部狀態。
負責人角色的作用:
(1) 負責保存備忘錄對象。
(2) 不檢查備忘錄對象的內容。
D:在本例中,備份(Memento)類是備忘錄角色、Windows系統(WindowsSystem)類是發起人角色、用戶(User)類是負責人角色。