2012-02-18 6 views
4

いくつかの線形連鎖(javaのStringBuilder)を作成したり、多くのプロパティ(PizzaBuilder)を持つオブジェクトを作成している場合は、ビルダーパターンが良いと思われます。Builderパターンを使用してマルチレベルツリーを構築する明確な方法はありますか?

紛らわしいノードの場所を指定せずにツリーを構築することはできますか?

a 
/| \ 
c d e 
    /\ 
    f g 

    TreeBuilder tb.addNode(levelNumber, parentNumber, nodeName) // I think this is terrible 

    tb.addNode(2, 3, g) //terrible 

このパターンでは、いい考えではありませんか?

おかげ

+1

StringBuilderはBuilderパターンに従いません。 builderパターンは "オブジェクトを作成するインスタンスを定義しますが、サブクラスはどのクラスをインスタンス化するかを決定します"。 –

+1

"ビルダー"とは、いわゆる流暢なビルダークラスを意味しますか?もしそうなら、[この質問](http://stackoverflow.com/questions/563328/elegant-and-maintainable-way-of-populating-tree-structures-in-c-sharp)は幾分それを扱います。グループのうち、私は[この回答](http://stackoverflow.com/a/563380/1215441)が一番好きでした。 – cutchin

+0

@ Jiahua - あなたが提供した見積もりはBuilderではなくFactory Methodのためのものです(GoFの内側カバーにあります)。 – kdgregory

答えて

2

ビルダーパターンを使用すると、一連のプロパティを持つクラスを持っている、とプロパティの様々なセットと、そのクラスの定義済みの型を持っているときに便利です。

a.add(c, d, e); 
e.add(f, g); 
8

はい、Builderパターンは、木のために使用することができます。

は、あなただけのツリーを作りたいです。ツリー内の各ノードには、独自のBuilderインスタンスが必要です。

ここには、ルートノードと2つの子ノードがあります。

Tree t = new TreeBuilder() 
     .addNode(new TreeBuilder() 
        .addNode("foo") 
        .addNode("bar") 
        .toTree() 
     .toTree() 

そして、ここで現実の世界の例だが、XMLを構築するために使用:http://practicalxml.svn.sourceforge.net/viewvc/practicalxml/trunk/src/main/java/net/sf/practicalxml/builder/(のpackage.htmlは、サンプルコードが含まれています)。

関連する問題