구조 모드의 Memento 모드

11370 단어 비망록 모드
1. 대상의 내부 상태만 포함하는 휴면 버전에 따라 대상을 재구성하기를 원한다면 Memento(비망록) 모드를 사용할 수 있습니다.방식: 짧은 비망록, 장기 비망록 3.예를 들다.
// : 
public class Memento {
    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}
import java.io.Serializable;
// : 
public class LongMemento implements Serializable {
    private int num;

    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
// : 、 
public class Caretaker {
    private Memento memento;
    private LongMemento longMemento;
    private final String filePath = "LongMemento.txt";

    public void save(LongMemento longMemento){
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream(filePath);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(longMemento);
            oos.flush();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                oos.close();
                fos.close();                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public LongMemento read(){
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream(filePath);
            ois = new ObjectInputStream(fis);
            longMemento = (LongMemento) ois.readObject();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {               
                ois.close();
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        return longMemento;
    }

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}
// : 
public class Originator {
    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public void setMemento(final Memento memento) {
        num = memento.getNum();
    }

    public Memento createMemento() {
        final Memento memento = new Memento();
        memento.setNum(num);
        return memento;
    }
    public void setLongMemento(final LongMemento memento) {
        num = memento.getNum();
    }

    public LongMemento createLongMemento() {
        final LongMemento memento = new LongMemento();
        memento.setNum(num);
        return memento;
    }
}
// 
public class Test {
    public static void main(String[] args){
        Caretaker caretaker = new Caretaker();
        Originator originator = new Originator();
        originator.setNum(100);
        caretaker.setMemento(originator.createMemento());
        System.out.println("start: " + originator.getNum());
        originator.setNum(10);
        System.out.println("then: " + originator.getNum());
        originator.setMemento(caretaker.getMemento());
        System.out.println("reset: " + originator.getNum());

        caretaker.save(originator.createLongMemento());
        System.out.println("2start: " + originator.getNum());
        originator.setNum(20);
        System.out.println("2then: " + originator.getNum());
        originator.setLongMemento(caretaker.read());
        System.out.println("2reset: " + originator.getNum());
    }
}
// 
start: 100
then: 10
reset: 100
2start: 100
2then: 20
2reset: 100

4. 요약: 메모(Memento) 모델의 의도는 대상에게 상태 저장과 상태 복구 기능을 제공하는 데 있다.응용 프로그램 세션 중 대상을 저장하고 복구하는 가장 흔히 볼 수 있는 이유는 취소 작업을 지원하는 것입니다.이 경우 우리는 대상의 상태를 다른 대상에 저장할 수 있다.대상이 여러 세션에 걸쳐 있는 지속적인 저장소를 지원하기 위해, 대상의 서열화나 다른 방식으로 비망록을 저장할 수 있습니다.5. 참조:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29140694&id=4127905

좋은 웹페이지 즐겨찾기