2010年4月30日 星期五

Design Pattern : 18 Memonto

當我們希望在所開發的程式裡,可以提供Redo Undo的功能
可以利用Memonto Pattern達到這個目標
把Memonto物件放在要提供Undo功能的程式中(Subject)

參與者
1.Memonto
Memonto本身利用一個陣列來儲存資料,當要restor資料,再
由陣列倒回來

public class Memonto {
    private Vector<String> memos=new Vector<String>();
    public void save(String value){
        memos.add(value);
    }
    public String restoreLast(){
        memos.removeElementAt(memos.size()-1);
        return result;
    }
}

2.Subject
要使用memo功能的主程式
當主程式執行save功能時,是把資料丟給memo去儲存
當要undo時,再利用memo把資料取回,寫回本應用程式的變數中

public class Subject {
    private Memonto memo;
    private String myText;
    public Subject(){
        memo=new Memonto();
    }
    public void save(String value){
        myText=value;
        memo.save(myText);
    }
    public String undo(){
        myText=memo.restoreLast();
        return myText;   
    }
}

3.Main
外部程式,只要呼叫應用程式提供的save跟undo method即可
不用管subject內部memo如何運作

TextField text=new TextField()
Subject subject=new Subject();
儲存
subject.save(text.getText());
Undo
text.setText(subject.undo());


沒有留言: