Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 我需要一个构建对象树的模式_Tree_Design Patterns - Fatal编程技术网

Tree 我需要一个构建对象树的模式

Tree 我需要一个构建对象树的模式,tree,design-patterns,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)

我有一些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,那么我需要对C节点执行XYZ。或者,如果我当前正在生成A的子节点,那么就不要生成D。

听起来您需要在每个节点上粘贴一个多态方法,以便每个节点都能够构建自己

public class Node
{
    public virtual BuildNode(IBuildStrategy strategy)
    {
    }
}
这样你就可以打电话了

root.BuildNode(new InitialNodeBuildingStrategy());

在子树中仍然允许自定义策略的情况下填充树。

您尝试过factree模式吗?哈哈哈。很抱歉