@634

Command パターン

Advertisement

命令をキューに格納して順番に実行する。

命令をクラス化する。クラス化した命令はキューに順次格納され、実行される。

サンプルコード

Main
public class Main{

    public static void main(String[] args){
        CommandList list = new CommandList();

        //コマンドをリストに追加
        list.addCommand(new TitleCommand("Java 入門"));
        list.addCommand(new TextCommand("Java の基礎を解説"));
        list.addCommand(new PriceCommand("2000"));

        list.addCommand(new TitleCommand("Java 応用"));
        list.addCommand(new TextCommand("基礎の次のステップ"));
        list.addCommand(new PriceCommand("2500"));

        //リスト内のコマンドを順番に実行
        list.doCommand();
    }
}

CommandList(キューイング&実行)
import java.util.ArrayList;
import java.util.Iterator;

class CommandList {
    private ArrayList commandList = new ArrayList();

    //コマンドをリストに追加
    public void addCommand(Command cmd){
        commandList.add(cmd);
    }

    //リスト内のコマンドを順番に実行
    public void doCommand(){
        Iterator iterator = commandList.iterator();
        while(iterator.hasNext()){
            Command cmd = (Command)iterator.next();
            cmd.output();
        }
    }
}

Command(各コマンドの抽象クラス)
abstract class Command {
    String str;
    abstract void output();
}

TitleCommand
class TitleCommand extends Command {
    public TitleCommand(String str){
        this.str = str;
    }

    public void output(){
        System.out.println("タイトル:" + str);
    }
}

TextCommand
class TextCommand extends Command {
    public TextCommand (String str){
        this.str = str;
    }

    public void output(){
        System.out.println("内容:" + str);
    }
}

PriceCommand
class PriceCommand extends Command {
    public PriceCommand(String str){
        this.str = str;
    }

    public void output(){
        System.out.println("価格:" + str);
    }
}
実行結果
タイトル:Java 入門
内容:Java の基礎を解説
価格:2000
タイトル:Java 応用
内容:基礎の次のステップ
価格:2500
現在は タイトル→内容→価格 の順に表示しているが、表示する順番を変更するときはコマンドの順番を変更するだけでよい。コマンドの取り消しも実装可能。
コマンドパターンでは、一度作成したコマンドをそのまま再利用することができる。

クラス図

Command

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール