- 追加された行はこの色です。
- 削除された行はこの色です。
*趣旨 [#p969eac5]
mementoのwikiのサンプルコードより、良いコードをかける気がしたので
書いてみる
*コード [#d852beea]
**Mementoクラス [#o911c8fe]
package com.memento;
import java.util.ArrayList;
/**
* Mementoパターン
*/
public class Memento <T> {
T state;
/**
* コンストラクター
* @param stateToSave
*/
public Memento(T state) {
set(state);
}
/**
* 値を設定
* @return
*/
public void set(T state) {
System.out.println(getClass().getSimpleName() + ": Setting state to " + state);
this.state = state;
}
/**
* 値を取得
* @return
*/
public T get() {
return state;
}
public StateList<T> stateList = new StateList<T>();
/**
* 新しい状態インスタンスを生成
* @return
*/
public Memento<T> clone() {
return new Memento<T>(state);
}
public void save() {
System.out.println("Originator: Saving to Memento.");
stateList.save(this);
}
public void restore(int index) {
set(stateList.get(index).get());
System.out.println("Originator: State after restoring from Memento: "+state);
}
/**
* ステータス履歴リスト
*
* @param <T>
*/
@SuppressWarnings({ "serial", "hiding" })
public class StateList<T> extends ArrayList<Memento<T>>{
public void save(Memento<T> state){
add(state.clone());
}
}
}
**MementoExampleクラス [#g7ac8be0]
package test;
import com.memento.Memento;
/**
* サンプル
*/
public class MementoExample {
public static void main(String[] args) {
Memento<String> memento = new Memento<String>("");
memento.set("State1");
memento.set("State2");
memento.save();
memento.set("State3");
memento.save();
memento.set("State4");
memento.restore(1);
}
}