2011-02-09 3 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, похоже, является какой-то политикой, и я хотел бы иметь возможность использовать различные политики в будущем.

О, еще один усложняющий фактор. В BuildTree есть вещи, которые обусловлены более ранними вещами, которые сделал BuildTree. Например, если я когда-либо создавал B, то мне нужно сделать XYZ для C узлов. Или, если я в настоящее время генерирую детей из A, тогда не создавайте D.

+0

Вы пробовали шаблон шаблона? HAHAHAHHA. Сожалею. –

ответ

0

Похоже, вам нужно придерживаться полиморфного метода на каждом узле, чтобы каждый узел мог сам строить.

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

Таким образом, вы можете просто позвонить

root.BuildNode(new InitialNodeBuildingStrategy()); 

для заполнения дерева в то же время позволяя для пользовательских стратегий в рамках поддеревьев.

Смежные вопросы