Java patterns: factory visitor facade