Mementoパターン
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*目次 [#ab4e0654]
#contents
*趣旨 [#p969eac5]
mementoのwikiのサンプルコードより、良いコードをかける気が...
書いてみる
**肝となる考え方 [#n9bdeafd]
それぞれの状態のインスタンスを保持するため、ディープクロ...
wikiのサンプルだとString型を使っていた、String型は、Java...
しかし、ふつう他のパラメータも保持する必要もでてくるだろ...
**作成したコードについて [#c2ccef27]
mementoとは、記念の品,形見; 思い出の種の意味だそうだ。
参考元のWikiコードのクラス名は、意図的に変更している。
Originatorとか、いろいろ、単語が使われているが、自分はい...
できれば、mementoという単語もStateという単語に修正したい。
あと、クラスは1つにまとめることができると判断したので、...
*コード [#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() + ":...
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 ...
}
/**
* ステータス履歴リスト
*
* @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);
}
}
**実行結果 [#va5dc36f]
CurrentState: Setting state to
CurrentState: Setting state to State1
CurrentState: Setting state to State2
Originator: Saving to Memento.
State: Setting state to State2
CurrentState: Setting state to State3
Originator: Saving to Memento.
State: Setting state to State3
CurrentState: Setting state to State4
CurrentState: Setting state to State3
Originator: State after restoring from Memento: State3
終了行:
*目次 [#ab4e0654]
#contents
*趣旨 [#p969eac5]
mementoのwikiのサンプルコードより、良いコードをかける気が...
書いてみる
**肝となる考え方 [#n9bdeafd]
それぞれの状態のインスタンスを保持するため、ディープクロ...
wikiのサンプルだとString型を使っていた、String型は、Java...
しかし、ふつう他のパラメータも保持する必要もでてくるだろ...
**作成したコードについて [#c2ccef27]
mementoとは、記念の品,形見; 思い出の種の意味だそうだ。
参考元のWikiコードのクラス名は、意図的に変更している。
Originatorとか、いろいろ、単語が使われているが、自分はい...
できれば、mementoという単語もStateという単語に修正したい。
あと、クラスは1つにまとめることができると判断したので、...
*コード [#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() + ":...
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 ...
}
/**
* ステータス履歴リスト
*
* @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);
}
}
**実行結果 [#va5dc36f]
CurrentState: Setting state to
CurrentState: Setting state to State1
CurrentState: Setting state to State2
Originator: Saving to Memento.
State: Setting state to State2
CurrentState: Setting state to State3
Originator: Saving to Memento.
State: Setting state to State3
CurrentState: Setting state to State4
CurrentState: Setting state to State3
Originator: State after restoring from Memento: State3
ページ名: