Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Follow an implementation of naive implementation of a visitable tree:</p> <pre><code>class Tree&lt;T&gt; implements Visitable&lt;T&gt; { // NB: LinkedHashSet preserves insertion order private final Set&lt;Tree&gt; children = new LinkedHashSet&lt;Tree&gt;(); private final T data; Tree(T data) { this.data = data; } void accept(Visitor&lt;T&gt; visitor) { visitor.visitData(this, data); for (Tree child : children) { Visitor&lt;T&gt; childVisitor = visitor.visitTree(child); child.accept(childVisitor); } } Tree child(T data) { for (Tree child: children ) { if (child.data.equals(data)) { return child; } } return child(new Tree(data)); } Tree child(Tree&lt;T&gt; child) { children.add(child); return child; } } </code></pre> <p>interfaces for Visitor Pattern:</p> <pre><code>interface Visitor&lt;T&gt; { Visitor&lt;T&gt; visitTree(Tree&lt;T&gt; tree); void visitData(Tree&lt;T&gt; parent, T data); } interface Visitable&lt;T&gt; { void accept(Visitor&lt;T&gt; visitor); } </code></pre> <p>sample implementation for Visitor Pattern:</p> <pre><code>class PrintIndentedVisitor implements Visitor&lt;String&gt; { private final int indent; PrintIndentedVisitor(int indent) { this.indent = indent; } Visitor&lt;String&gt; visitTree(Tree&lt;String&gt; tree) { return new IndentVisitor(indent + 2); } void visitData(Tree&lt;String&gt; parent, String data) { for (int i = 0; i &lt; indent; i++) { // TODO: naive implementation System.out.print(" "); } System.out.println(data); } } </code></pre> <p>and finally (!!!) a simple test case:</p> <pre><code> Tree&lt;String&gt; forest = new Tree&lt;String&gt;("forest"); Tree&lt;String&gt; current = forest; for (String tree : Arrays.asList("x1/x2/x3", "x1/x2/x4", "x1/x5")) { Tree&lt;String&gt; root = current; for (String data : tree.split("/")) { current = current.child(data); } current = root; } forest.accept(new PrintIndentedVisitor(0)); </code></pre> <p>output:</p> <pre> forest x1 x2 x3 x4 x5 </pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload