@startuml
package com.iluwatar.nullobject {
  class App {
    + App()
    + main(args : String[]) {static}
  }
  interface Node {
    + getLeft() : Node {abstract}
    + getName() : String {abstract}
    + getRight() : Node {abstract}
    + getTreeSize() : int {abstract}
    + walk() {abstract}
  }
  class NodeImpl {
    - LOGGER : Logger {static}
    - left : Node
    - name : String
    - right : Node
    + NodeImpl(name : String, left : Node, right : Node)
    + getLeft() : Node
    + getName() : String
    + getRight() : Node
    + getTreeSize() : int
    + walk()
  }
  class NullNode {
    - instance : NullNode {static}
    - NullNode()
    + getInstance() : NullNode {static}
    + getLeft() : Node
    + getName() : String
    + getRight() : Node
    + getTreeSize() : int
    + walk()
  }
}
NullNode -->  "-instance" NullNode
NodeImpl -->  "-left" Node
NodeImpl ..|> Node 
NullNode ..|> Node 
@enduml