Кажется, что шаблон строителя хорош, если вы делаете линейную цепочку вещей (java's 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
Или это не очень хорошая идея с этим рисунком?
Благодаря
StringBuilder не следует шаблону Builder. Шаблон построителя "определяет экземпляр для создания объекта, но позволяет подклассам решать, какой класс необходимо создать". –
«Строитель», вы имеете в виду так называемый свободный класс строителя? Если это так, [этот вопрос] (http://stackoverflow.com/questions/563328/elegant-and-maintainable-way-of-populating-tree-structures-in-c-sharp) обращается к нему несколько. Из группы мне понравился [этот ответ] (http://stackoverflow.com/a/563380/1215441) лучше всего. – cutchin
@Jiahua - указанная вами цитата предназначена для Factory Method, а не Builder (и находится на внутренней крышке GoF). – kdgregory