Memento的定義:
?????? Memento是一個(gè)保存另外一個(gè)對(duì)象的內(nèi)部狀態(tài)拷貝的對(duì)象,這樣就可以把對(duì)象恢復(fù)到原先狀態(tài)。
確的沒必要用這個(gè)東西,耗內(nèi)存,麻煩。我想備份對(duì)象為什么不用對(duì)象的深度拷貝呢。這樣不是很省事嗎?誰能告訴我一個(gè)理由呢?
下面是一個(gè)Memento模式例子,很簡單:
package com.pdw.pattern;
import java.io.*;
import java.util.*;
class Originator{
?private int number;
?private File file;
?
?
?
?
?public File getFile() {
??return file;
?}
?public void setFile(File file) {
??this.file = file;
?}
?public int getNumber() {
??return number;
?}
?public void setNumber(int number) {
??this.number = number;
?}
?public Originator(){}
?//創(chuàng)建備份
?public Memento getMemento(){
??return new Memento(this);
?}
?//恢復(fù)到原始值
?public void setMemento(Memento m){
??this.file=m.getFile();
??this.number=m.getNumber();
?}
}
class Memento implements Serializable{
?private? int number;
?private? File file;
?public File getFile() {
??return file;
?}
?public void setFile(File file) {
??this.file = file;
?}
?public int getNumber() {
??return number;
?}
?public void setNumber(int number) {
??this.number = number;
?}
?public Memento(Originator o){
??this.number=o.getNumber();
??this.file=o.getFile();
?}
?
}
public class MemebtoImpl {
?/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??Originator o=new Originator();
??o.setNumber(100);
??Memento m=o.getMemento();//建備一個(gè)備份對(duì)象
??o.setNumber(50); //改變對(duì)象屬性
??o.setMemento(m); //還原
??System.out.println(o.getNumber());
?}
}
posted on 2006-07-10 22:58
有貓相伴的日子 閱讀(349)
評(píng)論(0) 編輯 收藏 所屬分類:
Patterns