Memento パターン

Advertisement

オブジェクトの変更履歴を管理する

オブジェクトの状態が変更されるたびに状態を記録しておき、任意のタイミングで状態を元に戻せるようにする。

サンプルコード

Main クラス
public class Main {
    public static void main(String[] args){
        Bank bank = new Bank();
        Account account = new Account();

        for(int i = 0; i < 5; i++){
            account.addMoney(100);
            bank.setHistory((Account)account.clone());
            account.showMoney();
        }

        account = bank.backHistory(2);
        account.showMoney();
    }
}

Bank クラス
import java.util.Vector;
public class Bank {
    private Vector history = null;

    public Bank(){
        history = new Vector();
    }

    public void setHistory(Account account){
        history.add(account);
    }

    public Account backHistory(int index){
        System.out.println(index + "個前の状態に戻します。");
        return (Account)history.elementAt(history.size() - index - 1);
    }
}

Account クラス
public class Account implements Cloneable{
    private int money;

    public Account(){
        money = 0;
    }

    public Account(int money){
        this.money = money;
    }

    public void addMoney(int money){
        this.money = this.money + money;
    }

    public void showMoney(){
        System.out.println("現在の金額" + money + "円");
    }

    // 現在の状態のコピーを作成する
    public Object clone(){
        Object obj = null;
        try{
            obj = super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return obj;
    }
}

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール