Нулевой и составной шаблон не играют хорошо вместе - PullRequest
0 голосов
/ 21 июня 2011

В этом составном дереве я сохраняю ссылку на родительский узел для гибкого обхода дерева. Я не хочу проверять родительский объект на наличие нулевой ссылки все время, но если я создаю класс NullNode и инициализирую для этого родительский узел каждого узла, я получаю переполнение стека, поскольку NullNode имеет NullNode, имеет NullNode имеет .. .. до бесконечности Я попытался установить родителя NullNode в null, но затем мне все еще нужно выполнить проверку нулевой ссылки для родителя, которая, кажется, не справилась с этой задачей. кто-нибудь сталкивался с этим? Что, если что-нибудь можно сделать?

спасибо!

Ответы [ 2 ]

1 голос
/ 22 июня 2011

если я создаю класс NullNode и инициализирую для него каждый родительский узел, я получаю переполнение стека, поскольку NullNode имеет NullNode, имеет NullNode и имеет .... до бесконечности. Я пытался установить для родительского элемента NullNode значениеnull, но тогда мне все еще нужно выполнить проверку нулевых ссылок для родителя, которая, кажется, не справляется с этой задачей.кто-нибудь сталкивался с этим?

Ваш NullNode не должен фактически содержать другого NullNode в качестве родителя.Просто внедрите getParent() в NullNode (или как вы там это называете), чтобы вернуть this или self или что-либо еще, что означает это на вашем языке.

Однако, это все равно может быть плохой идеей, поскольку вы do должны в какой-то момент остановить обход.Вышесказанное поможет вам преодолеть рекурсию конструктора, но у дерева нет корня, так как он имеет нулевые узлы весь путь вверх или все время падает или что-то в этом роде.

Об этом будет гораздо проще говорить, еслиВы фактически показываете код, даже если он не работает, и немного описываете свои планы использования.

1 голос
/ 21 июня 2011

Пример счетчика (экстремальный псевдокод):

class NullNode(): Component{
   public NullNode(){

   }
    public something SearchUp(){
       return null;
    }
}

class Node: Component{
   public Node(t){
       this.parent = NullNode();
   }
    public void SetParent(Component parent){
       this.parent = parent;
    }
    public something SearchUp(){
      return self.parent.SearchUp();
    }
  }

abstract class Component{
    Component parent

    public Component(){
    }
    public something SearchUp();
 }
...