我需要一个用于构造对象树的模式

时间:2011-02-09 20:35:19

标签: tree design-patterns

我有一些构建多态对象树的代码(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。

1 个答案:

答案 0 :(得分:0)

听起来你需要在每个节点上粘贴一个多态方法,这样每个节点都能够自我构建。

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

这样你就可以直接打电话了

root.BuildNode(new InitialNodeBuildingStrategy());

填充树,同时仍允许子树内的自定义策略。