Есть ли чистый способ использовать шаблон Builder для построения многоуровневого дерева? - PullRequest
5 голосов
/ 18 февраля 2012

Кажется, что шаблон построителя хорош, если вы делаете какую-то линейную цепочку вещей (java's StringBuilder) или создаете объект со многими свойствами (PizzaBuilder).

Может ли оно быть расширено для построения дерева без указания возможного запутанного расположения узлов?

   a
 / | \
c  d  e
     / \
    f   g   

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

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

Или просто не очень хорошая идея с этим шаблоном?

Спасибо

Ответы [ 2 ]

9 голосов
/ 18 февраля 2012

Да, шаблоны деревьев могут быть использованы для деревьев.Каждый узел в дереве нуждается в своем собственном экземпляре компоновщика.

Вот пример с корневым и двумя дочерними узлами.

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

А вот пример реального мира, используемый для построения XML:1006 *http://practicalxml.svn.sourceforge.net/viewvc/practicalxml/trunk/src/main/java/net/sf/practicalxml/builder/ (package.html содержит пример кода).

2 голосов
/ 18 февраля 2012

Шаблон Builder полезен, когда у вас есть класс с набором свойств и у вас есть предопределенные типы этого класса с различными наборами свойств.

Вы просто хотите создать дерево:

a.add(c, d, e);
e.add(f, g);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...