趣旨

mementoのwikiのサンプルコードより、良いコードをかける気がしたので 書いてみる

コード

Mementoクラス

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?クラス

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);
    }
}
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS