2011-02-09 10 views
0

多形体のツリーを構築するコード(C#)があります。タイプに応じて、オブジェクトに0〜7の子がある場合があります。今、オブジェクトのコンストラクタは何もしない、と私は再帰的ヘルパー関数を使用して全体のオブジェクトツリーを構築する:オブジェクトのツリーを構築するためのパターンが必要です

// pseudocode 
void BuildTree(Node root) { 
    if(root is A) { 
     root.a_data = ... 
     root.a_child = GenerateNewNode(some_constraints); 
     BuildTree(root.a_child) 
    } else if(root is B) { 
     // same stuff, for B. Note B may have different chldren, etc 
    } 
} 

このすべては、本当に洗練さそうですので、基本的に私はここに私を助けることができるパターンを探しています。 BuildTree関数はある種のポリシーのようですが、今後は別のポリシーを使用できるようにしたいと考えています。

もう1つの複雑な要因です。 BuildTreeには、BuildTreeの以前のことを条件にしたものがあります。たとえば、私がBを生成したことがあるならば、XYZをCノードにする必要があります。現在、Aの子を生成している場合は、Dを生成しないでください。

+0

ファクトリーパターンを試しましたか?ハハハハ。ごめんなさい。 –

答えて

0

各ノードに多態的な方法を適用する必要があるように思えます。

public class Node 
{ 
    public virtual BuildNode(IBuildStrategy strategy) 
    { 
    } 
} 

まだサブツリー内のカスタム戦略を可能にしながらあなたは、単に

root.BuildNode(new InitialNodeBuildingStrategy()); 

ツリーを移入するために呼び出すことができますこの方法。

関連する問題