特定のクラスの状態を複製するクラスを用意してMementoとする。userは複製を作成したときにMementoをインスタンス化してコレクションに記録し、必要に応じてインスタンスを取り出す
Mementoは複製するメンバを保持する
以下のクラス構成で確認します
クラス | 説明 |
---|---|
Origin.class | 複製対象のクラス |
Memento.class | Originを複製する場合に、MementoにOriginのデータを複製し、Mementoを保存する |
MementoList.class | コレクション(ListやMapなど)を保持し、Mementoインスタンスを格納する |
user(Main.class) | 動作を確認する |
*user 他の開発者がこのパターンを利用する、という意味合いを含みます
Origin.class
class Origin{
int No;
void setNo(int No){
this.No=No;
}
Memento createMemento(){
return new Memento(No);
}
}
Memento.class
class Memento{
int No; // Originと同じfieldを持たせる
Memento(int No){
this.No=No;
}
int getNo(){
return No;
}
}
MementoList.class
class MementoList{
Map map = new HashMap();
void put(int key,Memento mmt){
map.put(key,mmt);
}
Memento getMemento(int key){
return (Memento) map.get(key);
}
}
user(Main.class)
public static void main(String[] args){
Origin or = new Origin();
MementoList list = new MementoList();
or.setNo(1);
list.put(1,or.createMemento());
or.setNo(2);
list.put(2,or.createMemento());
Memento m1 = list.getMemento(1);
System.out.println(m1.getNo());
}