mementoメモモード
memento覚書モードとは、普段言われている覚書の考え方を利用して、後で使う可能性のあるものを先に覚えて、使うときに覚書を調べて、再利用することです.ソフトウェア設計では、オブジェクトの状態を格納し、必要に応じて、このオブジェクトは、メモに要求するだけで、メモからデータを読み出し、以前の状態に復元することができる.メモである以上、1つ以上の情報源、1つ以上の記録、1つの記録セット(記録管理)があります.情報を格納する必要があるオブジェクトが情報のソースです.プライバシーのせいで、メモは、記録者だけが見ることができます.同様に、メモオブジェクトは、ソース送信者以外のオブジェクトに対して、その送信者の内部変数の値を非表示にする必要があります.したがってjavaでは、レコードクラスは一般的にコンテンツクラスとして設計される.データの格納方法については、「設計モードのMemento:メモリに元のデータのコピーを残す簡単なモード」とj道に書いてある.そうでなければ、ストレージの方法は、必要に応じて異なる形式、永続的または非永続的を選択することができるはずです.
一般的なアーキテクチャ:
Webプログラムにおけるセッションはmemtoメモモードアプリケーションの典型的な例である.servletのセッションによる関数setAttribute
(String,Object)と関数getAttribute(String)は,sessionの内部実装がハッシュテーブルを用いてオブジェクト状態を格納すべきであることがわかる.
一般的なアーキテクチャ:
// ,
public class Originator{
private String state;
public Memento createMemento(){//
return new Memento( this.state );
}
public void restoreMemento(Memento memento){//
this.setState(memento.getState());
}
public String getState(){//
return this.state;
}
public void setState(String state){//
this.state = state;
}
//
class Memento {
private String savedState;
private Memento(String someState){
savedState = someState;
}
private void setState(String someState){
savedState = someState;
}
private String getState(){
return savedState;
}
}
}
// ( )
public class Caretaker{
private Memento memento;
public Memento retrieveMemento(){//
return this.memento;
}
public void saveMemento(Memento memento){//
this.memento = memento;
}
}
// ( )
public class Caretaker{
private Originator originator;
private Vector mementos = new Vector();
private int total;
public Caretaker(Originator originator){
this.originator = originator;
total= 0;
}
public void createMemento(){ //
Memento memento = this.originator.createMemento();
mementos.addElement(memento);
total++;
}
public void saveMemento(Memento memento){//
mementos.addElement(memento);
total++;
}
public void retrieveMemento(int index){ //
Memento memento = (Memento) mementos.elementAt (index);
originator.restoreMemento(memento);
}
public void removeMemento(int index){//
mementos.removeElementAt(index);
total--;
}
}
Webプログラムにおけるセッションはmemtoメモモードアプリケーションの典型的な例である.servletのセッションによる関数setAttribute
(String,Object)と関数getAttribute(String)は,sessionの内部実装がハッシュテーブルを用いてオブジェクト状態を格納すべきであることがわかる.