私にはビジターパターンのように聞こえます-http://en.wikipedia.org/wiki/Visitor_patternを参照してください。
ウィキペディアの記事では、車の要素で構成される車の例を示しています。基本クラスCarElementVisitorがあります。要素と基本ビジタークラスが連携して、ツリーを反復処理できるようにします。
あなたの場合、ツリーやフルーツなどをナビゲートする方法を知っている基本クラスTreeElementVisitorがあるかもしれません。
"Tree, how many fruit do you have?"
この問題を解決するには、FruitCountingVisitorというTreeElementVisitorのサブクラスを作成します。このサブクラスは、実行中のカウントをメンバー変数として保持します。すべてのvisitFruit
メソッドがカウンターをインクリメントします。visitTree
などの他の方法visitBranch
は何もしません。
Tree tree = // create a tree
FruitCountingVisitor visitor = // create the visitor
tree.accept(visitor);
System.out.println(visitor.getCount());
次に、AppleCountingVisitorを作成するか、FruitCountingVisitorを一般化して、コンストラクター引数に基づいて特定のフルーツをフィルター処理することができます。