@634

Visitor パターン

Advertisement

複数のオブジェクトを訪問する

Visitor(訪問者)は複数のオブジェクトを順番に訪問し、定められた処理を順に実行する。

サンプルコード

インタフェース Acceptor
// 受け入れ側
public interface Acceptor {
    public void accept(Visitor visitor);
}

クラス Figure
public abstract class Figure implements Acceptor{
    public abstract String getName();
    public void accept(Visitor visitor){
        visitor.visit(this);
    }
}

クラス Square
public class Square extends Figure{
    private String name = null;

    public Square(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
}

クラス Triangle
public class Triangle extends Figure{
    private String name = null;

    public Triangle(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
}

インタフェース Visitor
// 訪問者
public interface Visitor {
    public void visit(Figure figure);
}

public class ConsoleVisitor implements Visitor{
    public void visit(Figure figure){
        System.out.println(figure.getName());
    }
}

クラス Main
import java.util.Vector;

public class Main {
    public static void main(String[] args){
        Vector figureBox = new Vector();
        figureBox.add(new Square("square-1"));
        figureBox.add(new Square("square-2"));
        figureBox.add(new Square("triangle-1"));

        Visitor visitor = new ConsoleVisitor();

        for(int i = 0; i < figureBox.size(); i++){
            Figure figure = (Figure)figureBox.elementAt(i);
            figure.accept(visitor);
        }
    }
}

Advertisement

ショートカット

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

サイト検索


Y!ログール